nautilus_tardis/http/
models.rs1use chrono::{DateTime, Utc};
17use serde::{Deserialize, Serialize};
18use serde_json::Value;
19use ustr::Ustr;
20
21use crate::common::{
22 enums::{TardisExchange, TardisInstrumentType, TardisOptionType},
23 parse::{deserialize_f64_or_string, deserialize_opt_f64_or_string, deserialize_uppercase},
24};
25
26#[derive(Debug, Clone, Serialize, Deserialize)]
27#[serde(rename_all = "camelCase")]
28pub struct TardisInstrumentInfo {
31 #[serde(deserialize_with = "deserialize_uppercase")]
33 pub id: Ustr,
34 pub exchange: TardisExchange,
36 pub base_currency: Ustr,
38 pub quote_currency: Ustr,
40 #[serde(rename = "type")]
42 pub instrument_type: TardisInstrumentType,
43 pub active: bool,
45 #[serde(skip_serializing_if = "Option::is_none")]
47 pub listing: Option<DateTime<Utc>>,
48 pub available_since: DateTime<Utc>,
50 #[serde(skip_serializing_if = "Option::is_none")]
52 pub available_to: Option<DateTime<Utc>>,
53 #[serde(skip_serializing_if = "Option::is_none")]
55 pub expiry: Option<DateTime<Utc>>,
56 #[serde(deserialize_with = "deserialize_f64_or_string")]
58 pub price_increment: f64,
59 #[serde(deserialize_with = "deserialize_f64_or_string")]
61 pub amount_increment: f64,
62 #[serde(deserialize_with = "deserialize_f64_or_string")]
64 pub min_trade_amount: f64,
65 #[serde(deserialize_with = "deserialize_f64_or_string")]
67 pub maker_fee: f64,
68 #[serde(deserialize_with = "deserialize_f64_or_string")]
70 pub taker_fee: f64,
71 #[serde(skip_serializing_if = "Option::is_none")]
73 pub inverse: Option<bool>,
74 #[serde(skip_serializing_if = "Option::is_none")]
76 #[serde(default, deserialize_with = "deserialize_opt_f64_or_string")]
77 pub contract_multiplier: Option<f64>,
78 #[serde(skip_serializing_if = "Option::is_none")]
80 pub quanto: Option<bool>,
81 #[serde(skip_serializing_if = "Option::is_none")]
83 pub settlement_currency: Option<Ustr>,
84 #[serde(skip_serializing_if = "Option::is_none")]
86 #[serde(default, deserialize_with = "deserialize_opt_f64_or_string")]
87 pub strike_price: Option<f64>,
88 #[serde(skip_serializing_if = "Option::is_none")]
90 pub option_type: Option<TardisOptionType>,
91 #[serde(skip_serializing_if = "Option::is_none")]
93 pub changes: Option<Vec<TardisInstrumentChanges>>,
94 #[serde(flatten)]
96 pub extra: serde_json::Map<String, Value>,
97}
98
99#[derive(Debug, Clone, Serialize, Deserialize)]
100#[serde(rename_all = "camelCase")]
101pub struct TardisInstrumentChanges {
103 pub until: DateTime<Utc>,
105 #[serde(skip_serializing_if = "Option::is_none")]
107 #[serde(default, deserialize_with = "deserialize_opt_f64_or_string")]
108 pub price_increment: Option<f64>,
109 #[serde(skip_serializing_if = "Option::is_none")]
111 #[serde(default, deserialize_with = "deserialize_opt_f64_or_string")]
112 pub amount_increment: Option<f64>,
113 #[serde(skip_serializing_if = "Option::is_none")]
115 #[serde(default, deserialize_with = "deserialize_opt_f64_or_string")]
116 pub contract_multiplier: Option<f64>,
117 #[serde(skip_serializing_if = "Option::is_none")]
119 #[serde(default, deserialize_with = "deserialize_opt_f64_or_string")]
120 pub maker_fee: Option<f64>,
121 #[serde(skip_serializing_if = "Option::is_none")]
123 #[serde(default, deserialize_with = "deserialize_opt_f64_or_string")]
124 pub taker_fee: Option<f64>,
125 #[serde(flatten)]
127 pub extra: serde_json::Map<String, Value>,
128}