1use serde::{Deserialize, Serialize};
19use serde_json::Value;
20use ustr::Ustr;
21
22use crate::common::{
23 enums::{
24 BinanceContractStatus, BinanceFuturesOrderType, BinanceIncomeType, BinanceMarginType,
25 BinanceOrderStatus, BinancePositionSide, BinancePriceMatch, BinanceSelfTradePreventionMode,
26 BinanceSide, BinanceTimeInForce, BinanceTradingStatus, BinanceWorkingType,
27 },
28 models::BinanceRateLimit,
29};
30
31#[derive(Clone, Debug, Serialize, Deserialize)]
33#[serde(rename_all = "camelCase")]
34pub struct BinanceServerTime {
35 pub server_time: i64,
37}
38
39#[derive(Clone, Debug, Serialize, Deserialize)]
41#[serde(rename_all = "camelCase")]
42pub struct BinanceFuturesUsdExchangeInfo {
43 pub timezone: String,
45 pub server_time: i64,
47 pub rate_limits: Vec<BinanceRateLimit>,
49 #[serde(default)]
51 pub exchange_filters: Vec<Value>,
52 #[serde(default)]
54 pub assets: Vec<BinanceFuturesAsset>,
55 pub symbols: Vec<BinanceFuturesUsdSymbol>,
57}
58
59#[derive(Clone, Debug, Serialize, Deserialize)]
61#[serde(rename_all = "camelCase")]
62pub struct BinanceFuturesAsset {
63 pub asset: Ustr,
65 pub margin_available: bool,
67 #[serde(default)]
69 pub auto_asset_exchange: Option<String>,
70}
71
72#[derive(Clone, Debug, Serialize, Deserialize)]
74#[serde(rename_all = "camelCase")]
75pub struct BinanceFuturesUsdSymbol {
76 pub symbol: Ustr,
78 pub pair: Ustr,
80 pub contract_type: String,
82 pub delivery_date: i64,
84 pub onboard_date: i64,
86 pub status: BinanceTradingStatus,
88 pub maint_margin_percent: String,
90 pub required_margin_percent: String,
92 pub base_asset: Ustr,
94 pub quote_asset: Ustr,
96 pub margin_asset: Ustr,
98 pub price_precision: i32,
100 pub quantity_precision: i32,
102 pub base_asset_precision: i32,
104 pub quote_precision: i32,
106 #[serde(default)]
108 pub underlying_type: Option<String>,
109 #[serde(default)]
111 pub underlying_sub_type: Vec<String>,
112 #[serde(default)]
114 pub settle_plan: Option<i64>,
115 #[serde(default)]
117 pub trigger_protect: Option<String>,
118 #[serde(default)]
120 pub liquidation_fee: Option<String>,
121 #[serde(default)]
123 pub market_take_bound: Option<String>,
124 pub order_types: Vec<String>,
126 pub time_in_force: Vec<String>,
128 pub filters: Vec<Value>,
130}
131
132#[derive(Clone, Debug, Serialize, Deserialize)]
134#[serde(rename_all = "camelCase")]
135pub struct BinanceFuturesCoinExchangeInfo {
136 pub timezone: String,
138 pub server_time: i64,
140 pub rate_limits: Vec<BinanceRateLimit>,
142 #[serde(default)]
144 pub exchange_filters: Vec<Value>,
145 pub symbols: Vec<BinanceFuturesCoinSymbol>,
147}
148
149#[derive(Clone, Debug, Serialize, Deserialize)]
151#[serde(rename_all = "camelCase")]
152pub struct BinanceFuturesCoinSymbol {
153 pub symbol: Ustr,
155 pub pair: Ustr,
157 pub contract_type: String,
159 pub delivery_date: i64,
161 pub onboard_date: i64,
163 #[serde(default)]
165 pub contract_status: Option<BinanceContractStatus>,
166 pub contract_size: i64,
168 pub maint_margin_percent: String,
170 pub required_margin_percent: String,
172 pub base_asset: Ustr,
174 pub quote_asset: Ustr,
176 pub margin_asset: Ustr,
178 pub price_precision: i32,
180 pub quantity_precision: i32,
182 pub base_asset_precision: i32,
184 pub quote_precision: i32,
186 #[serde(default, rename = "equalQtyPrecision")]
188 pub equal_qty_precision: Option<i32>,
189 #[serde(default)]
191 pub trigger_protect: Option<String>,
192 #[serde(default)]
194 pub liquidation_fee: Option<String>,
195 #[serde(default)]
197 pub market_take_bound: Option<String>,
198 pub order_types: Vec<String>,
200 pub time_in_force: Vec<String>,
202 pub filters: Vec<Value>,
204}
205
206#[derive(Clone, Debug, Serialize, Deserialize)]
208#[serde(rename_all = "camelCase")]
209pub struct BinanceFuturesTicker24hr {
210 pub symbol: Ustr,
212 pub price_change: String,
214 pub price_change_percent: String,
216 pub weighted_avg_price: String,
218 pub last_price: String,
220 #[serde(default)]
222 pub last_qty: Option<String>,
223 pub open_price: String,
225 pub high_price: String,
227 pub low_price: String,
229 pub volume: String,
231 pub quote_volume: String,
233 pub open_time: i64,
235 pub close_time: i64,
237 #[serde(default)]
239 pub first_id: Option<i64>,
240 #[serde(default)]
242 pub last_id: Option<i64>,
243 #[serde(default)]
245 pub count: Option<i64>,
246}
247
248#[derive(Clone, Debug, Serialize, Deserialize)]
250#[serde(rename_all = "camelCase")]
251pub struct BinanceFuturesMarkPrice {
252 pub symbol: Ustr,
254 pub mark_price: String,
256 #[serde(default)]
258 pub index_price: Option<String>,
259 #[serde(default)]
261 pub estimated_settle_price: Option<String>,
262 #[serde(default)]
264 pub last_funding_rate: Option<String>,
265 #[serde(default)]
267 pub next_funding_time: Option<i64>,
268 #[serde(default)]
270 pub interest_rate: Option<String>,
271 pub time: i64,
273}
274
275#[derive(Clone, Debug, Serialize, Deserialize)]
277#[serde(rename_all = "camelCase")]
278pub struct BinanceOrderBook {
279 pub last_update_id: i64,
281 pub bids: Vec<(String, String)>,
283 pub asks: Vec<(String, String)>,
285 #[serde(default, rename = "E")]
287 pub event_time: Option<i64>,
288 #[serde(default, rename = "T")]
290 pub transaction_time: Option<i64>,
291}
292
293#[derive(Clone, Debug, Serialize, Deserialize)]
295#[serde(rename_all = "camelCase")]
296pub struct BinanceBookTicker {
297 pub symbol: Ustr,
299 pub bid_price: String,
301 pub bid_qty: String,
303 pub ask_price: String,
305 pub ask_qty: String,
307 #[serde(default)]
309 pub time: Option<i64>,
310}
311
312#[derive(Clone, Debug, Serialize, Deserialize)]
314#[serde(rename_all = "camelCase")]
315pub struct BinancePriceTicker {
316 pub symbol: Ustr,
318 pub price: String,
320 #[serde(default)]
322 pub time: Option<i64>,
323}
324
325#[derive(Clone, Debug, Serialize, Deserialize)]
327#[serde(rename_all = "camelCase")]
328pub struct BinanceFundingRate {
329 pub symbol: Ustr,
331 pub funding_rate: String,
333 pub funding_time: i64,
335 #[serde(default)]
337 pub mark_price: Option<String>,
338 #[serde(default)]
340 pub index_price: Option<String>,
341}
342
343#[derive(Clone, Debug, Serialize, Deserialize)]
345#[serde(rename_all = "camelCase")]
346pub struct BinanceOpenInterest {
347 pub symbol: Ustr,
349 pub open_interest: String,
351 pub time: i64,
353}
354
355#[derive(Clone, Debug, Serialize, Deserialize)]
357#[serde(rename_all = "camelCase")]
358pub struct BinanceFuturesBalance {
359 #[serde(default)]
361 pub account_alias: Option<String>,
362 pub asset: Ustr,
364 pub balance: String,
366 #[serde(default)]
368 pub cross_wallet_balance: Option<String>,
369 #[serde(default)]
371 pub cross_un_pnl: Option<String>,
372 pub available_balance: String,
374 #[serde(default)]
376 pub max_withdraw_amount: Option<String>,
377 #[serde(default)]
379 pub margin_available: Option<bool>,
380 pub update_time: i64,
382 #[serde(default)]
384 pub withdraw_available: Option<String>,
385}
386
387#[derive(Clone, Debug, Serialize, Deserialize)]
389#[serde(rename_all = "camelCase")]
390pub struct BinancePositionRisk {
391 pub symbol: Ustr,
393 pub position_amt: String,
395 pub entry_price: String,
397 pub mark_price: String,
399 #[serde(default)]
401 pub un_realized_profit: Option<String>,
402 #[serde(default)]
404 pub liquidation_price: Option<String>,
405 pub leverage: String,
407 #[serde(default)]
409 pub max_notional_value: Option<String>,
410 #[serde(default)]
412 pub margin_type: Option<BinanceMarginType>,
413 #[serde(default)]
415 pub isolated_margin: Option<String>,
416 #[serde(default)]
418 pub is_auto_add_margin: Option<bool>,
419 #[serde(default)]
421 pub position_side: Option<BinancePositionSide>,
422 #[serde(default)]
424 pub notional: Option<String>,
425 #[serde(default)]
427 pub isolated_wallet: Option<String>,
428 #[serde(default)]
430 pub adl_quantile: Option<u8>,
431 #[serde(default)]
433 pub update_time: Option<i64>,
434 #[serde(default)]
436 pub break_even_price: Option<String>,
437 #[serde(default)]
439 pub bust_price: Option<String>,
440}
441
442#[derive(Clone, Debug, Serialize, Deserialize)]
444#[serde(rename_all = "camelCase")]
445pub struct BinanceIncomeRecord {
446 #[serde(default)]
448 pub symbol: Option<Ustr>,
449 pub income_type: BinanceIncomeType,
451 pub income: String,
453 pub asset: Ustr,
455 pub time: i64,
457 #[serde(default)]
459 pub info: Option<String>,
460 #[serde(default)]
462 pub tran_id: Option<i64>,
463 #[serde(default)]
465 pub trade_id: Option<i64>,
466}
467
468#[derive(Clone, Debug, Serialize, Deserialize)]
470#[serde(rename_all = "camelCase")]
471pub struct BinanceUserTrade {
472 pub symbol: Ustr,
474 pub id: i64,
476 pub order_id: i64,
478 pub price: String,
480 pub qty: String,
482 #[serde(default)]
484 pub quote_qty: Option<String>,
485 pub realized_pnl: String,
487 pub side: BinanceSide,
489 #[serde(default)]
491 pub position_side: Option<BinancePositionSide>,
492 pub time: i64,
494 pub buyer: bool,
496 pub maker: bool,
498 #[serde(default)]
500 pub commission: Option<String>,
501 #[serde(default)]
503 pub commission_asset: Option<Ustr>,
504 #[serde(default)]
506 pub margin_asset: Option<Ustr>,
507}
508
509#[derive(Clone, Debug, Serialize, Deserialize)]
511#[serde(rename_all = "camelCase")]
512pub struct BinanceFuturesOrder {
513 pub symbol: Ustr,
515 pub order_id: i64,
517 pub client_order_id: String,
519 pub orig_qty: String,
521 pub executed_qty: String,
523 pub cum_quote: String,
525 pub price: String,
527 #[serde(default)]
529 pub avg_price: Option<String>,
530 #[serde(default)]
532 pub stop_price: Option<String>,
533 pub status: BinanceOrderStatus,
535 pub time_in_force: BinanceTimeInForce,
537 #[serde(rename = "type")]
539 pub order_type: BinanceFuturesOrderType,
540 #[serde(default)]
542 pub orig_type: Option<BinanceFuturesOrderType>,
543 pub side: BinanceSide,
545 #[serde(default)]
547 pub position_side: Option<BinancePositionSide>,
548 #[serde(default)]
550 pub reduce_only: Option<bool>,
551 #[serde(default)]
553 pub close_position: Option<bool>,
554 #[serde(default)]
556 pub activate_price: Option<String>,
557 #[serde(default)]
559 pub price_rate: Option<String>,
560 #[serde(default)]
562 pub working_type: Option<BinanceWorkingType>,
563 #[serde(default)]
565 pub price_protect: Option<bool>,
566 #[serde(default)]
568 pub is_isolated: Option<bool>,
569 #[serde(default)]
571 pub good_till_date: Option<i64>,
572 #[serde(default)]
574 pub price_match: Option<BinancePriceMatch>,
575 #[serde(default)]
577 pub self_trade_prevention_mode: Option<BinanceSelfTradePreventionMode>,
578 #[serde(default)]
580 pub update_time: Option<i64>,
581 #[serde(default)]
583 pub working_type_id: Option<i64>,
584}