nautilus_tardis/http/
query.rs1use chrono::{DateTime, Utc};
17use derive_builder::Builder;
18use serde::Serialize;
19
20mod datetime_format {
21 use chrono::{DateTime, Utc};
22 use serde::{self, Serializer};
23
24 pub(super) fn serialize<S>(
25 date: &Option<DateTime<Utc>>,
26 serializer: S,
27 ) -> Result<S::Ok, S::Error>
28 where
29 S: Serializer,
30 {
31 match date {
32 Some(dt) => {
33 serializer.serialize_str(&dt.to_rfc3339_opts(chrono::SecondsFormat::Millis, true))
34 }
35 None => serializer.serialize_none(),
36 }
37 }
38}
39
40#[derive(Debug, Default, Serialize, Builder)]
44#[serde(rename_all = "camelCase")]
45pub struct InstrumentFilter {
46 #[serde(skip_serializing_if = "Option::is_none")]
47 #[builder(default)]
48 pub base_currency: Option<Vec<String>>,
49 #[serde(skip_serializing_if = "Option::is_none")]
50 #[builder(default)]
51 pub quote_currency: Option<Vec<String>>,
52 #[serde(skip_serializing_if = "Option::is_none")]
53 #[serde(rename = "type")]
54 #[builder(default)]
55 pub instrument_type: Option<Vec<String>>,
56 #[serde(skip_serializing_if = "Option::is_none")]
57 #[builder(default)]
58 pub contract_type: Option<Vec<String>>,
59 #[serde(skip_serializing_if = "Option::is_none")]
60 #[builder(default)]
61 pub active: Option<bool>,
62 #[serde(skip_serializing_if = "Option::is_none")]
63 #[serde(with = "datetime_format")]
64 #[builder(default)]
65 pub available_since: Option<DateTime<Utc>>,
66 #[serde(skip_serializing_if = "Option::is_none")]
67 #[serde(with = "datetime_format")]
68 #[builder(default)]
69 pub available_to: Option<DateTime<Utc>>,
70}