1use rust_decimal::Decimal;
4use serde::Deserialize;
5
6#[derive(Debug, Clone, Deserialize)]
8#[serde(rename_all = "camelCase")]
9pub struct ServerTime {
10 pub time_second: String,
12 pub time_nano: String,
14}
15
16#[derive(Debug, Clone, Deserialize)]
18#[serde(rename_all = "camelCase")]
19pub struct InstrumentsInfo {
20 pub category: String,
22 pub list: Vec<InstrumentInfo>,
24 #[serde(default)]
26 pub next_page_cursor: String,
27}
28
29#[derive(Debug, Clone, Deserialize)]
31#[serde(rename_all = "camelCase")]
32pub struct InstrumentInfo {
33 pub symbol: String,
35 #[serde(default)]
37 pub contract_type: String,
38 pub status: String,
40 #[serde(default)]
42 pub base_coin: String,
43 #[serde(default)]
45 pub quote_coin: String,
46 #[serde(default)]
48 pub settle_coin: String,
49 #[serde(default)]
51 pub launch_time: String,
52 #[serde(default)]
54 pub delivery_time: String,
55 #[serde(default)]
57 pub delivery_fee_rate: String,
58 #[serde(default)]
60 pub price_scale: String,
61 #[serde(default)]
63 pub leverage_filter: Option<LeverageFilter>,
64 #[serde(default)]
66 pub price_filter: Option<PriceFilter>,
67 #[serde(default)]
69 pub lot_size_filter: Option<LotSizeFilter>,
70}
71
72#[derive(Debug, Clone, Deserialize)]
74#[serde(rename_all = "camelCase")]
75pub struct LeverageFilter {
76 pub min_leverage: String,
78 pub max_leverage: String,
80 pub leverage_step: String,
82}
83
84#[derive(Debug, Clone, Deserialize)]
86#[serde(rename_all = "camelCase")]
87pub struct PriceFilter {
88 pub min_price: String,
90 pub max_price: String,
92 pub tick_size: String,
94}
95
96#[derive(Debug, Clone, Deserialize)]
98#[serde(rename_all = "camelCase")]
99pub struct LotSizeFilter {
100 #[serde(default)]
102 pub max_order_qty: String,
103 #[serde(default)]
105 pub min_order_qty: String,
106 #[serde(default)]
108 pub qty_step: String,
109 #[serde(default)]
111 pub post_only_max_order_qty: String,
112 #[serde(default)]
114 pub base_precision: String,
115 #[serde(default)]
117 pub quote_precision: String,
118 #[serde(default)]
120 pub min_order_amt: String,
121 #[serde(default)]
123 pub max_order_amt: String,
124}
125
126#[derive(Debug, Clone, Deserialize)]
128#[serde(rename_all = "camelCase")]
129pub struct Orderbook {
130 pub s: String,
132 pub b: Vec<[String; 2]>,
134 pub a: Vec<[String; 2]>,
136 pub ts: u64,
138 pub u: u64,
140}
141
142#[derive(Debug, Clone, Deserialize)]
144#[serde(rename_all = "camelCase")]
145pub struct Tickers {
146 pub category: String,
148 pub list: Vec<Ticker>,
150}
151
152#[derive(Debug, Clone, Deserialize)]
154#[serde(rename_all = "camelCase")]
155pub struct Ticker {
156 pub symbol: String,
158 #[serde(default)]
160 pub last_price: String,
161 #[serde(default)]
163 pub index_price: String,
164 #[serde(default)]
166 pub mark_price: String,
167 #[serde(default)]
169 pub prev_price_24h: String,
170 #[serde(default)]
172 pub price_24h_pcnt: String,
173 #[serde(default)]
175 pub high_price_24h: String,
176 #[serde(default)]
178 pub low_price_24h: String,
179 #[serde(default)]
181 pub prev_price_1h: String,
182 #[serde(default)]
184 pub open_interest: String,
185 #[serde(default)]
187 pub open_interest_value: String,
188 #[serde(default)]
190 pub turnover_24h: String,
191 #[serde(default)]
193 pub volume_24h: String,
194 #[serde(default)]
196 pub funding_rate: String,
197 #[serde(default)]
199 pub next_funding_time: String,
200 #[serde(default)]
202 pub bid_1_price: String,
203 #[serde(default)]
205 pub bid_1_size: String,
206 #[serde(default)]
208 pub ask_1_price: String,
209 #[serde(default)]
211 pub ask_1_size: String,
212}
213
214#[derive(Debug, Clone, Deserialize)]
216#[serde(rename_all = "camelCase")]
217pub struct Klines {
218 pub category: String,
220 pub symbol: String,
222 pub list: Vec<Vec<String>>,
224}
225
226#[derive(Debug, Clone)]
228pub struct Kline {
229 pub start_time: u64,
231 pub open: Decimal,
233 pub high: Decimal,
235 pub low: Decimal,
237 pub close: Decimal,
239 pub volume: Decimal,
241 pub turnover: Decimal,
243}
244
245#[derive(Debug, Clone, Deserialize)]
247#[serde(rename_all = "camelCase")]
248pub struct FundingHistory {
249 pub category: String,
251 pub list: Vec<FundingRecord>,
253}
254
255#[derive(Debug, Clone, Deserialize)]
257#[serde(rename_all = "camelCase")]
258pub struct FundingRecord {
259 pub symbol: String,
261 pub funding_rate: String,
263 pub funding_rate_timestamp: String,
265}
266
267#[derive(Debug, Clone, Deserialize)]
269#[serde(rename_all = "camelCase")]
270pub struct RecentTrades {
271 pub category: String,
273 pub list: Vec<Trade>,
275}
276
277#[derive(Debug, Clone, Deserialize)]
279#[serde(rename_all = "camelCase")]
280pub struct Trade {
281 pub exec_id: String,
283 pub symbol: String,
285 pub price: String,
287 pub size: String,
289 pub side: String,
291 pub time: String,
293 #[serde(default)]
295 pub is_block_trade: bool,
296}
297
298#[derive(Debug, Clone, Deserialize)]
300#[serde(rename_all = "camelCase")]
301pub struct OpenInterest {
302 pub category: String,
304 pub symbol: String,
306 pub list: Vec<OpenInterestRecord>,
308 #[serde(default)]
310 pub next_page_cursor: String,
311}
312
313#[derive(Debug, Clone, Deserialize)]
315#[serde(rename_all = "camelCase")]
316pub struct OpenInterestRecord {
317 pub open_interest: String,
319 pub timestamp: String,
321}
322
323#[derive(Debug, Clone, Deserialize)]
325#[serde(rename_all = "camelCase")]
326pub struct RiskLimits {
327 pub category: String,
329 pub list: Vec<RiskLimit>,
331}
332
333#[derive(Debug, Clone, Deserialize)]
335#[serde(rename_all = "camelCase")]
336pub struct RiskLimit {
337 pub id: i32,
339 pub symbol: String,
341 pub risk_limit_value: String,
343 pub maintenance_margin: String,
345 pub initial_margin: String,
347 pub max_leverage: String,
349}