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 fn serialize<S>(date: &Option<DateTime<Utc>>, serializer: S) -> Result<S::Ok, S::Error>
25 where
26 S: Serializer,
27 {
28 match date {
29 Some(dt) => {
30 serializer.serialize_str(&dt.to_rfc3339_opts(chrono::SecondsFormat::Millis, true))
31 }
32 None => serializer.serialize_none(),
33 }
34 }
35}
36
37#[derive(Debug, Default, Serialize, Builder)]
41#[serde(rename_all = "camelCase")]
42pub struct InstrumentFilter {
43 #[serde(skip_serializing_if = "Option::is_none")]
44 #[builder(default)]
45 pub base_currency: Option<Vec<String>>,
46 #[serde(skip_serializing_if = "Option::is_none")]
47 #[builder(default)]
48 pub quote_currency: Option<Vec<String>>,
49 #[serde(skip_serializing_if = "Option::is_none")]
50 #[serde(rename = "type")]
51 #[builder(default)]
52 pub instrument_type: Option<Vec<String>>,
53 #[serde(skip_serializing_if = "Option::is_none")]
54 #[builder(default)]
55 pub contract_type: Option<Vec<String>>,
56 #[serde(skip_serializing_if = "Option::is_none")]
57 #[builder(default)]
58 pub active: Option<bool>,
59 #[serde(skip_serializing_if = "Option::is_none")]
60 #[serde(with = "datetime_format")]
61 #[builder(default)]
62 pub available_since: Option<DateTime<Utc>>,
63 #[serde(skip_serializing_if = "Option::is_none")]
64 #[serde(with = "datetime_format")]
65 #[builder(default)]
66 pub available_to: Option<DateTime<Utc>>,
67}