1use rust_decimal::Decimal;
4use serde::{Deserialize, Serialize};
5
6#[derive(Debug, Clone, Serialize, 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, Serialize, 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, Serialize, 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, Serialize, 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, Serialize, 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, Serialize, 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, Serialize, 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, Serialize, Deserialize)]
144#[serde(rename_all = "camelCase")]
145pub struct Tickers {
146 pub category: String,
148 pub list: Vec<Ticker>,
150}
151
152#[derive(Debug, Clone, Serialize, 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, Serialize, 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, Serialize, Deserialize)]
247#[serde(rename_all = "camelCase")]
248pub struct FundingHistory {
249 pub category: String,
251 pub list: Vec<FundingRecord>,
253}
254
255#[derive(Debug, Clone, Serialize, 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, Serialize, Deserialize)]
269#[serde(rename_all = "camelCase")]
270pub struct RecentTrades {
271 pub category: String,
273 pub list: Vec<Trade>,
275}
276
277#[derive(Debug, Clone, Serialize, 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, Serialize, 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, Serialize, Deserialize)]
315#[serde(rename_all = "camelCase")]
316pub struct OpenInterestRecord {
317 pub open_interest: String,
319 pub timestamp: String,
321}
322
323#[derive(Debug, Clone, Serialize, Deserialize)]
325#[serde(rename_all = "camelCase")]
326pub struct RiskLimits {
327 pub category: String,
329 pub list: Vec<RiskLimit>,
331}
332
333#[derive(Debug, Clone, Serialize, 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}
350
351#[derive(Debug, Clone, Serialize, Deserialize)]
353#[serde(rename_all = "camelCase")]
354pub struct AdlAlertRecord {
355 #[serde(skip_serializing_if = "Option::is_none")]
356 pub coin: Option<String>,
357 #[serde(skip_serializing_if = "Option::is_none")]
358 pub symbol: Option<String>,
359 #[serde(skip_serializing_if = "Option::is_none")]
360 pub balance: Option<String>,
361 #[serde(skip_serializing_if = "Option::is_none")]
362 pub max_balance: Option<String>,
363 #[serde(skip_serializing_if = "Option::is_none")]
364 pub insurance_pnl_ratio: Option<String>,
365 #[serde(skip_serializing_if = "Option::is_none")]
366 pub pnl_ratio: Option<String>,
367 #[serde(skip_serializing_if = "Option::is_none")]
368 pub adl_trigger_threshold: Option<String>,
369 #[serde(skip_serializing_if = "Option::is_none")]
370 pub adl_stop_ratio: Option<String>,
371}
372
373#[derive(Debug, Clone, Serialize, Deserialize)]
375#[serde(rename_all = "camelCase")]
376pub struct AdlAlertResult {
377 #[serde(skip_serializing_if = "Option::is_none")]
378 pub updated_time: Option<String>,
379 #[serde(skip_serializing_if = "Option::is_none")]
380 pub list: Option<Vec<AdlAlertRecord>>,
381}
382
383pub type GetAdlAlertResponse = AdlAlertResult;
385
386#[derive(Debug, Clone, Serialize, Deserialize)]
388#[serde(rename_all = "camelCase")]
389pub struct DeliveryPriceRecord {
390 #[serde(skip_serializing_if = "Option::is_none")]
391 pub symbol: Option<String>,
392 #[serde(skip_serializing_if = "Option::is_none")]
393 pub delivery_price: Option<String>,
394 #[serde(skip_serializing_if = "Option::is_none")]
395 pub delivery_time: Option<String>,
396}
397
398#[derive(Debug, Clone, Serialize, Deserialize)]
400#[serde(rename_all = "camelCase")]
401pub struct DeliveryPriceResult {
402 #[serde(skip_serializing_if = "Option::is_none")]
403 pub category: Option<String>,
404 #[serde(skip_serializing_if = "Option::is_none")]
405 pub next_page_cursor: Option<String>,
406 #[serde(skip_serializing_if = "Option::is_none")]
407 pub list: Option<Vec<DeliveryPriceRecord>>,
408}
409
410pub type GetDeliveryPriceResponse = DeliveryPriceResult;
412
413#[derive(Debug, Clone, Serialize, Deserialize)]
415#[serde(rename_all = "camelCase")]
416pub struct FeeRateLevel {
417 #[serde(skip_serializing_if = "Option::is_none")]
418 pub level: Option<String>,
419 #[serde(skip_serializing_if = "Option::is_none")]
420 pub taker_fee_rate: Option<String>,
421 #[serde(skip_serializing_if = "Option::is_none")]
422 pub maker_fee_rate: Option<String>,
423 #[serde(skip_serializing_if = "Option::is_none")]
424 pub maker_rebate: Option<String>,
425}
426
427#[derive(Debug, Clone, Serialize, Deserialize)]
429#[serde(rename_all = "camelCase")]
430pub struct FeeGroup {
431 #[serde(skip_serializing_if = "Option::is_none")]
432 pub group_name: Option<String>,
433 #[serde(skip_serializing_if = "Option::is_none")]
434 pub weighting_factor: Option<i32>,
435 #[serde(skip_serializing_if = "Option::is_none")]
436 pub symbols_numbers: Option<i32>,
437 #[serde(skip_serializing_if = "Option::is_none")]
438 pub symbols: Option<Vec<String>>,
439 #[serde(skip_serializing_if = "Option::is_none")]
442 pub fee_rates: Option<Vec<FeeRateLevel>>,
443 #[serde(skip_serializing_if = "Option::is_none")]
444 pub update_time: Option<String>,
445}
446
447#[derive(Debug, Clone, Serialize, Deserialize)]
449#[serde(rename_all = "camelCase")]
450pub struct FeeGroupInfoResult {
451 #[serde(skip_serializing_if = "Option::is_none")]
452 pub list: Option<Vec<FeeGroup>>,
453}
454
455pub type GetFeeGroupInfoResponse = FeeGroupInfoResult;
457
458#[derive(Debug, Clone, Serialize, Deserialize)]
460#[serde(rename_all = "camelCase")]
461pub struct VolatilityRecord {
462 #[serde(skip_serializing_if = "Option::is_none")]
463 pub period: Option<i32>,
464 #[serde(skip_serializing_if = "Option::is_none")]
465 pub value: Option<String>,
466 #[serde(skip_serializing_if = "Option::is_none")]
467 pub time: Option<String>,
468}
469
470pub type GetHistoricalVolatilityResponse = Vec<VolatilityRecord>;
475
476#[derive(Debug, Clone, Serialize, Deserialize)]
478#[serde(rename_all = "camelCase")]
479pub struct IndexComponentItem {
480 #[serde(skip_serializing_if = "Option::is_none")]
481 pub exchange: Option<String>,
482 #[serde(skip_serializing_if = "Option::is_none")]
483 pub symbol: Option<String>,
484 #[serde(skip_serializing_if = "Option::is_none")]
485 pub price: Option<String>,
486 #[serde(skip_serializing_if = "Option::is_none")]
487 pub weight: Option<String>,
488}
489
490#[derive(Debug, Clone, Serialize, Deserialize)]
492#[serde(rename_all = "camelCase")]
493pub struct IndexComponentsResult {
494 #[serde(skip_serializing_if = "Option::is_none")]
495 pub index_name: Option<String>,
496 #[serde(skip_serializing_if = "Option::is_none")]
497 pub index_price: Option<String>,
498 #[serde(skip_serializing_if = "Option::is_none")]
499 pub timestamp: Option<String>,
500 #[serde(skip_serializing_if = "Option::is_none")]
501 pub components: Option<Vec<IndexComponentItem>>,
502}
503
504pub type IndexComponentsResponse = IndexComponentsResult;
506
507#[derive(Debug, Clone, Serialize, Deserialize)]
509#[serde(rename_all = "camelCase")]
510pub struct InsurancePoolRecord {
511 #[serde(skip_serializing_if = "Option::is_none")]
512 pub coin: Option<String>,
513 #[serde(skip_serializing_if = "Option::is_none")]
514 pub balance: Option<String>,
515 #[serde(skip_serializing_if = "Option::is_none")]
516 pub value: Option<String>,
517}
518
519#[derive(Debug, Clone, Serialize, Deserialize)]
521#[serde(rename_all = "camelCase")]
522pub struct InsuranceResult {
523 #[serde(skip_serializing_if = "Option::is_none")]
524 pub updated_time: Option<String>,
525 #[serde(skip_serializing_if = "Option::is_none")]
526 pub list: Option<Vec<InsurancePoolRecord>>,
527}
528
529pub type InsuranceResponse = InsuranceResult;
531
532#[derive(Debug, Clone, Serialize, Deserialize)]
534#[serde(rename_all = "camelCase")]
535pub struct LongShortRatioRecord {
536 #[serde(skip_serializing_if = "Option::is_none")]
537 pub symbol: Option<String>,
538 #[serde(skip_serializing_if = "Option::is_none")]
539 pub buy_ratio: Option<String>,
540 #[serde(skip_serializing_if = "Option::is_none")]
541 pub sell_ratio: Option<String>,
542 #[serde(skip_serializing_if = "Option::is_none")]
543 pub timestamp: Option<String>,
544}
545
546#[derive(Debug, Clone, Serialize, Deserialize)]
548#[serde(rename_all = "camelCase")]
549pub struct LongShortRatioResult {
550 #[serde(skip_serializing_if = "Option::is_none")]
551 pub list: Option<Vec<LongShortRatioRecord>>,
552 #[serde(skip_serializing_if = "Option::is_none")]
553 pub next_page_cursor: Option<String>,
554}
555
556pub type LongShortRatioResponse = LongShortRatioResult;
558
559#[derive(Debug, Clone, Serialize, Deserialize)]
561#[serde(rename_all = "camelCase")]
562pub struct NewDeliveryPriceRecord {
563 #[serde(skip_serializing_if = "Option::is_none")]
564 pub symbol: Option<String>,
565 #[serde(skip_serializing_if = "Option::is_none")]
566 pub delivery_price: Option<String>,
567 #[serde(skip_serializing_if = "Option::is_none")]
568 pub delivery_time: Option<String>,
569}
570
571#[derive(Debug, Clone, Serialize, Deserialize)]
573#[serde(rename_all = "camelCase")]
574pub struct NewDeliveryPriceResult {
575 #[serde(skip_serializing_if = "Option::is_none")]
576 pub category: Option<String>,
577 #[serde(skip_serializing_if = "Option::is_none")]
578 pub list: Option<Vec<NewDeliveryPriceRecord>>,
579}
580
581pub type NewDeliveryPriceResponse = NewDeliveryPriceResult;
583
584#[derive(Debug, Clone, Serialize, Deserialize)]
586#[serde(rename_all = "camelCase")]
587pub struct OrderPriceLimitResult {
588 #[serde(skip_serializing_if = "Option::is_none")]
589 pub category: Option<String>,
590 #[serde(skip_serializing_if = "Option::is_none")]
591 pub symbol: Option<String>,
592 #[serde(skip_serializing_if = "Option::is_none")]
593 pub buy_lmt: Option<String>,
594 #[serde(skip_serializing_if = "Option::is_none")]
595 pub sell_lmt: Option<String>,
596 #[serde(skip_serializing_if = "Option::is_none")]
597 pub ts: Option<String>,
598}
599
600pub type OrderPriceLimitResponse = OrderPriceLimitResult;
601
602#[derive(Debug, Clone, Serialize, Deserialize)]
603#[serde(rename_all = "camelCase")]
604pub struct RpiOrderbookResult {
605 #[serde(skip_serializing_if = "Option::is_none")]
606 pub s: Option<String>,
607 #[serde(skip_serializing_if = "Option::is_none")]
608 pub b: Option<Vec<Vec<String>>>,
609 #[serde(skip_serializing_if = "Option::is_none")]
610 pub a: Option<Vec<Vec<String>>>,
611 #[serde(skip_serializing_if = "Option::is_none")]
612 pub ts: Option<i64>,
613 #[serde(skip_serializing_if = "Option::is_none")]
614 pub u: Option<i64>,
615 #[serde(skip_serializing_if = "Option::is_none")]
616 pub seq: Option<i64>,
617 #[serde(skip_serializing_if = "Option::is_none")]
618 pub cts: Option<i64>,
619}
620
621pub type RpiOrderbookResponse = RpiOrderbookResult;
622
623#[derive(Debug, Clone, Serialize, Deserialize)]
624#[serde(rename_all = "camelCase")]
625pub struct IndexComponent {
626 #[serde(skip_serializing_if = "Option::is_none")]
627 pub exchange: Option<String>,
628 #[serde(skip_serializing_if = "Option::is_none")]
629 pub spot_pair: Option<String>,
630 #[serde(skip_serializing_if = "Option::is_none")]
631 pub equivalent_price: Option<String>,
632 #[serde(skip_serializing_if = "Option::is_none")]
633 pub multiplier: Option<String>,
634 #[serde(skip_serializing_if = "Option::is_none")]
635 pub price: Option<String>,
636 #[serde(skip_serializing_if = "Option::is_none")]
637 pub weight: Option<String>,
638}
639
640pub type GetIndexPriceComponentsResponse = IndexComponentsResult;
641
642#[derive(Debug, Clone, Serialize, Deserialize)]
643#[serde(rename_all = "camelCase")]
644pub struct IndexKlineEntry {
645 pub item: Vec<String>,
646}
647
648#[derive(Debug, Clone, Serialize, Deserialize)]
649#[serde(rename_all = "camelCase")]
650pub struct IndexPriceKlineResult {
651 pub category: String,
652 pub symbol: String,
653 pub list: Vec<IndexKlineEntry>,
654}
655
656pub type IndexPriceKlineResponse = IndexPriceKlineResult;
657
658#[derive(Debug, Clone, Serialize, Deserialize)]
659#[serde(rename_all = "camelCase")]
660pub struct LotSizeFilterLinear {
661 pub max_order_qty: String,
662 pub min_order_qty: String,
663 pub qty_step: String,
664 pub post_only_max_order_qty: String,
665 pub max_mkt_order_qty: String,
666 pub min_notional_value: String,
667}
668
669#[derive(Debug, Clone, Serialize, Deserialize)]
670#[serde(rename_all = "camelCase")]
671pub struct LotSizeFilterSpot {
672 pub base_precision: String,
673 pub quote_precision: String,
674 pub min_order_amt: String,
675 pub max_order_amt: String,
676 pub max_limit_order_qty: String,
677 pub max_market_order_qty: String,
678 pub post_only_max_limit_order_size: String,
679}
680
681#[derive(Debug, Clone, Serialize, Deserialize)]
682#[serde(rename_all = "camelCase")]
683pub struct RiskParameters {
684 pub price_limit_ratio_x: String,
685 pub price_limit_ratio_y: String,
686}
687
688#[derive(Debug, Clone, Serialize, Deserialize)]
689#[serde(rename_all = "camelCase")]
690pub struct InstrumentLinearInverse {
691 pub symbol: String,
692 pub contract_type: String,
693 pub status: String,
694 pub base_coin: String,
695 pub quote_coin: String,
696 pub launch_time: String,
697 pub delivery_time: String,
698 pub delivery_fee_rate: String,
699 pub price_scale: String,
700 pub leverage_filter: serde_json::Value,
701 pub price_filter: serde_json::Value,
702 pub lot_size_filter: LotSizeFilterLinear,
703 pub unified_margin_trade: bool,
704 pub funding_interval: i32,
705 pub settle_coin: String,
706 pub copy_trading: String,
707 pub upper_funding_rate: String,
708 pub lower_funding_rate: String,
709 pub is_pre_listing: bool,
710 #[serde(skip_serializing_if = "Option::is_none")]
714 pub pre_listing_info: Option<serde_json::Value>,
715 pub risk_parameters: RiskParameters,
716}
717
718#[derive(Debug, Clone, Serialize, Deserialize)]
719#[serde(rename_all = "camelCase")]
720pub struct InstrumentSpot {
721 pub symbol: String,
722 pub base_coin: String,
723 pub quote_coin: String,
724 pub status: String,
725 pub margin_trading: String,
726 pub st_tag: String,
727 pub lot_size_filter: LotSizeFilterSpot,
728 pub price_filter: serde_json::Value,
729 pub risk_parameters: RiskParameters,
730}
731
732#[derive(Debug, Clone, Serialize, Deserialize)]
733#[serde(rename_all = "camelCase")]
734pub struct InstrumentOption {
735 pub symbol: String,
736 pub options_type: String,
737 pub status: String,
738 pub base_coin: String,
739 pub quote_coin: String,
740 pub settle_coin: String,
741 pub launch_time: String,
742 pub delivery_time: String,
743 pub price_filter: serde_json::Value,
744 pub lot_size_filter: serde_json::Value,
745}
746
747#[derive(Debug, Clone, Serialize, Deserialize)]
748#[serde(rename_all = "camelCase")]
749pub struct InstrumentsInfoResult {
750 pub category: String,
751 pub next_page_cursor: String,
752 pub list: Vec<serde_json::Value>,
753}
754
755pub type InstrumentsInfoResponse = InstrumentsInfoResult;
756
757#[derive(Debug, Clone, Serialize, Deserialize)]
758#[serde(rename_all = "camelCase")]
759pub struct InsuranceRecord {
760 #[serde(skip_serializing_if = "Option::is_none")]
761 pub coin: Option<String>,
762 #[serde(skip_serializing_if = "Option::is_none")]
763 pub symbols: Option<String>,
764 #[serde(skip_serializing_if = "Option::is_none")]
765 pub balance: Option<String>,
766 #[serde(skip_serializing_if = "Option::is_none")]
767 pub value: Option<String>,
768}
769
770pub type GetInsurancePoolResponse = InsuranceResult;
771
772#[derive(Debug, Clone, Serialize, Deserialize)]
773#[serde(rename_all = "camelCase")]
774pub struct KlineEntry {
775 pub items: Vec<String>,
776}
777
778#[derive(Debug, Clone, Serialize, Deserialize)]
779#[serde(rename_all = "camelCase")]
780pub struct KlineResult {
781 pub category: String,
782 pub symbol: String,
783 pub list: Vec<KlineEntry>,
784}
785
786pub type KlineResponse = KlineResult;
787
788pub type GetLongShortRatioResponse = LongShortRatioResult;
789
790#[derive(Debug, Clone, Serialize, Deserialize)]
791#[serde(rename_all = "camelCase")]
792pub struct MarkKlineEntry {
793 #[serde(skip_serializing_if = "Option::is_none")]
794 pub items: Option<Vec<String>>,
795}
796
797#[derive(Debug, Clone, Serialize, Deserialize)]
798#[serde(rename_all = "camelCase")]
799pub struct MarkPriceKlineResult {
800 #[serde(skip_serializing_if = "Option::is_none")]
801 pub category: Option<String>,
802 #[serde(skip_serializing_if = "Option::is_none")]
803 pub symbol: Option<String>,
804 #[serde(skip_serializing_if = "Option::is_none")]
805 pub list: Option<Vec<MarkKlineEntry>>,
806}
807
808pub type MarkPriceKlineResponse = MarkPriceKlineResult;
809
810pub type GetNewDeliveryPriceResponse = NewDeliveryPriceResult;
811
812#[derive(Debug, Clone, Serialize, Deserialize)]
813#[serde(rename_all = "camelCase")]
814pub struct OpenInterestResult {
815 #[serde(skip_serializing_if = "Option::is_none")]
816 pub category: Option<String>,
817 #[serde(skip_serializing_if = "Option::is_none")]
818 pub symbol: Option<String>,
819 #[serde(skip_serializing_if = "Option::is_none")]
820 pub list: Option<Vec<OpenInterestRecord>>,
821 #[serde(skip_serializing_if = "Option::is_none")]
822 pub next_page_cursor: Option<String>,
823}
824
825pub type OpenInterestResponse = OpenInterestResult;
826
827pub type GetOrderPriceLimitResponse = OrderPriceLimitResult;
828
829#[derive(Debug, Clone, Serialize, Deserialize)]
830#[serde(rename_all = "camelCase")]
831pub struct OrderbookLevel {
832 #[serde(skip_serializing_if = "Option::is_none")]
833 pub items: Option<Vec<String>>,
834}
835
836#[derive(Debug, Clone, Serialize, Deserialize)]
837#[serde(rename_all = "camelCase")]
838pub struct OrderbookResult {
839 #[serde(skip_serializing_if = "Option::is_none")]
840 pub s: Option<String>,
841 #[serde(skip_serializing_if = "Option::is_none")]
842 pub b: Option<Vec<OrderbookLevel>>,
843 #[serde(skip_serializing_if = "Option::is_none")]
844 pub a: Option<Vec<OrderbookLevel>>,
845 #[serde(skip_serializing_if = "Option::is_none")]
846 pub ts: Option<i64>,
847 #[serde(skip_serializing_if = "Option::is_none")]
848 pub u: Option<i64>,
849 #[serde(skip_serializing_if = "Option::is_none")]
850 pub seq: Option<i64>,
851 #[serde(skip_serializing_if = "Option::is_none")]
852 pub cts: Option<i64>,
853}
854
855pub type OrderbookResponse = OrderbookResult;
856
857#[derive(Debug, Clone, Serialize, Deserialize)]
858#[serde(rename_all = "camelCase")]
859pub struct PremiumIndexKlineEntry {
860 #[serde(skip_serializing_if = "Option::is_none")]
861 pub items: Option<Vec<String>>,
862}
863
864#[derive(Debug, Clone, Serialize, Deserialize)]
865#[serde(rename_all = "camelCase")]
866pub struct PremiumIndexKlineResult {
867 #[serde(skip_serializing_if = "Option::is_none")]
868 pub category: Option<String>,
869 #[serde(skip_serializing_if = "Option::is_none")]
870 pub symbol: Option<String>,
871 #[serde(skip_serializing_if = "Option::is_none")]
872 pub list: Option<Vec<PremiumIndexKlineEntry>>,
873}
874
875pub type PremiumIndexKlineResponse = PremiumIndexKlineResult;
876
877#[derive(Debug, Clone, Serialize, Deserialize)]
878#[serde(rename_all = "camelCase")]
879pub struct TradeRecord {
880 #[serde(skip_serializing_if = "Option::is_none")]
881 pub exec_id: Option<String>,
882 #[serde(skip_serializing_if = "Option::is_none")]
883 pub symbol: Option<String>,
884 #[serde(skip_serializing_if = "Option::is_none")]
885 pub price: Option<String>,
886 #[serde(skip_serializing_if = "Option::is_none")]
887 pub size: Option<String>,
888 #[serde(skip_serializing_if = "Option::is_none")]
889 pub side: Option<String>,
890 #[serde(skip_serializing_if = "Option::is_none")]
891 pub time: Option<String>,
892 #[serde(skip_serializing_if = "Option::is_none")]
893 pub is_block_trade: Option<bool>,
894 #[serde(rename = "isRPITrade", skip_serializing_if = "Option::is_none")]
895 pub is_rpi_trade: Option<bool>,
896 #[serde(skip_serializing_if = "Option::is_none")]
897 pub seq: Option<String>,
898 #[serde(rename = "mP", skip_serializing_if = "Option::is_none")]
899 pub m_p: Option<String>,
900 #[serde(rename = "iP", skip_serializing_if = "Option::is_none")]
901 pub i_p: Option<String>,
902 #[serde(rename = "mIv", skip_serializing_if = "Option::is_none")]
903 pub m_iv: Option<String>,
904 #[serde(skip_serializing_if = "Option::is_none")]
905 pub iv: Option<String>,
906}
907
908#[derive(Debug, Clone, Serialize, Deserialize)]
909#[serde(rename_all = "camelCase")]
910pub struct RecentTradeResult {
911 #[serde(skip_serializing_if = "Option::is_none")]
912 pub category: Option<String>,
913 #[serde(skip_serializing_if = "Option::is_none")]
914 pub list: Option<Vec<TradeRecord>>,
915}
916
917pub type RecentTradeResponse = RecentTradeResult;
918
919#[derive(Debug, Clone, Serialize, Deserialize)]
920#[serde(rename_all = "camelCase")]
921pub struct RiskLimitTier {
922 #[serde(skip_serializing_if = "Option::is_none")]
923 pub id: Option<i32>,
924 #[serde(skip_serializing_if = "Option::is_none")]
925 pub symbol: Option<String>,
926 #[serde(skip_serializing_if = "Option::is_none")]
927 pub risk_limit_value: Option<String>,
928 #[serde(skip_serializing_if = "Option::is_none")]
929 pub maintenance_margin: Option<String>,
930 #[serde(skip_serializing_if = "Option::is_none")]
931 pub initial_margin: Option<String>,
932 #[serde(skip_serializing_if = "Option::is_none")]
933 pub is_lowest_risk: Option<i32>,
934 #[serde(skip_serializing_if = "Option::is_none")]
935 pub max_leverage: Option<String>,
936 #[serde(skip_serializing_if = "Option::is_none")]
937 pub mm_deduction: Option<String>,
938}
939
940#[derive(Debug, Clone, Serialize, Deserialize)]
941#[serde(rename_all = "camelCase")]
942pub struct RiskLimitResult {
943 #[serde(skip_serializing_if = "Option::is_none")]
944 pub category: Option<String>,
945 #[serde(skip_serializing_if = "Option::is_none")]
946 pub list: Option<Vec<RiskLimitTier>>,
947 #[serde(skip_serializing_if = "Option::is_none")]
948 pub next_page_cursor: Option<String>,
949}
950
951pub type RiskLimitResponse = RiskLimitResult;
952
953#[derive(Debug, Clone, Serialize, Deserialize)]
954#[serde(rename_all = "camelCase")]
955pub struct RpiOrderbookLevel {
956 #[serde(skip_serializing_if = "Option::is_none")]
957 pub items: Option<Vec<String>>,
958}
959
960pub type GetRpiOrderbookResponse = RpiOrderbookResult;
961
962#[derive(Debug, Clone, Serialize, Deserialize)]
963#[serde(rename_all = "camelCase")]
964pub struct TickerLinearInverse {
965 #[serde(skip_serializing_if = "Option::is_none")]
966 pub symbol: Option<String>,
967 #[serde(skip_serializing_if = "Option::is_none")]
968 pub last_price: Option<String>,
969 #[serde(skip_serializing_if = "Option::is_none")]
970 pub index_price: Option<String>,
971 #[serde(skip_serializing_if = "Option::is_none")]
972 pub mark_price: Option<String>,
973 #[serde(skip_serializing_if = "Option::is_none")]
974 pub prev_price_24h: Option<String>,
975 #[serde(skip_serializing_if = "Option::is_none")]
976 pub price_24h_pcnt: Option<String>,
977 #[serde(skip_serializing_if = "Option::is_none")]
978 pub high_price_24h: Option<String>,
979 #[serde(skip_serializing_if = "Option::is_none")]
980 pub low_price_24h: Option<String>,
981 #[serde(skip_serializing_if = "Option::is_none")]
982 pub prev_price_1h: Option<String>,
983 #[serde(skip_serializing_if = "Option::is_none")]
984 pub open_interest: Option<String>,
985 #[serde(skip_serializing_if = "Option::is_none")]
986 pub open_interest_value: Option<String>,
987 #[serde(skip_serializing_if = "Option::is_none")]
988 pub turnover_24h: Option<String>,
989 #[serde(skip_serializing_if = "Option::is_none")]
990 pub volume_24h: Option<String>,
991 #[serde(skip_serializing_if = "Option::is_none")]
992 pub funding_rate: Option<String>,
993 #[serde(skip_serializing_if = "Option::is_none")]
994 pub next_funding_time: Option<String>,
995 #[serde(skip_serializing_if = "Option::is_none")]
996 pub bid1_price: Option<String>,
997 #[serde(skip_serializing_if = "Option::is_none")]
998 pub bid1_size: Option<String>,
999 #[serde(skip_serializing_if = "Option::is_none")]
1000 pub ask1_price: Option<String>,
1001 #[serde(skip_serializing_if = "Option::is_none")]
1002 pub ask1_size: Option<String>,
1003 #[serde(skip_serializing_if = "Option::is_none")]
1004 pub funding_interval_hour: Option<String>,
1005 #[serde(skip_serializing_if = "Option::is_none")]
1006 pub funding_cap: Option<String>,
1007}
1008
1009#[derive(Debug, Clone, Serialize, Deserialize)]
1010#[serde(rename_all = "camelCase")]
1011pub struct TickerSpot {
1012 #[serde(skip_serializing_if = "Option::is_none")]
1013 pub symbol: Option<String>,
1014 #[serde(skip_serializing_if = "Option::is_none")]
1015 pub bid1_price: Option<String>,
1016 #[serde(skip_serializing_if = "Option::is_none")]
1017 pub bid1_size: Option<String>,
1018 #[serde(skip_serializing_if = "Option::is_none")]
1019 pub ask1_price: Option<String>,
1020 #[serde(skip_serializing_if = "Option::is_none")]
1021 pub ask1_size: Option<String>,
1022 #[serde(skip_serializing_if = "Option::is_none")]
1023 pub last_price: Option<String>,
1024 #[serde(skip_serializing_if = "Option::is_none")]
1025 pub prev_price_24h: Option<String>,
1026 #[serde(skip_serializing_if = "Option::is_none")]
1027 pub price_24h_pcnt: Option<String>,
1028 #[serde(skip_serializing_if = "Option::is_none")]
1029 pub high_price_24h: Option<String>,
1030 #[serde(skip_serializing_if = "Option::is_none")]
1031 pub low_price_24h: Option<String>,
1032 #[serde(skip_serializing_if = "Option::is_none")]
1033 pub turnover_24h: Option<String>,
1034 #[serde(skip_serializing_if = "Option::is_none")]
1035 pub volume_24h: Option<String>,
1036 #[serde(skip_serializing_if = "Option::is_none")]
1037 pub usd_index_price: Option<String>,
1038}
1039
1040#[derive(Debug, Clone, Serialize, Deserialize)]
1041#[serde(rename_all = "camelCase")]
1042pub struct TickerOption {
1043 #[serde(skip_serializing_if = "Option::is_none")]
1044 pub symbol: Option<String>,
1045 #[serde(skip_serializing_if = "Option::is_none")]
1046 pub bid1_price: Option<String>,
1047 #[serde(skip_serializing_if = "Option::is_none")]
1048 pub bid1_size: Option<String>,
1049 #[serde(skip_serializing_if = "Option::is_none")]
1050 pub bid1_iv: Option<String>,
1051 #[serde(skip_serializing_if = "Option::is_none")]
1052 pub ask1_price: Option<String>,
1053 #[serde(skip_serializing_if = "Option::is_none")]
1054 pub ask1_size: Option<String>,
1055 #[serde(skip_serializing_if = "Option::is_none")]
1056 pub ask1_iv: Option<String>,
1057 #[serde(skip_serializing_if = "Option::is_none")]
1058 pub last_price: Option<String>,
1059 #[serde(skip_serializing_if = "Option::is_none")]
1060 pub high_price_24h: Option<String>,
1061 #[serde(skip_serializing_if = "Option::is_none")]
1062 pub low_price_24h: Option<String>,
1063 #[serde(skip_serializing_if = "Option::is_none")]
1064 pub mark_price: Option<String>,
1065 #[serde(skip_serializing_if = "Option::is_none")]
1066 pub index_price: Option<String>,
1067 #[serde(skip_serializing_if = "Option::is_none")]
1068 pub mark_iv: Option<String>,
1069 #[serde(skip_serializing_if = "Option::is_none")]
1070 pub open_interest: Option<String>,
1071 #[serde(skip_serializing_if = "Option::is_none")]
1072 pub turnover_24h: Option<String>,
1073 #[serde(skip_serializing_if = "Option::is_none")]
1074 pub volume_24h: Option<String>,
1075 #[serde(skip_serializing_if = "Option::is_none")]
1076 pub delta: Option<String>,
1077 #[serde(skip_serializing_if = "Option::is_none")]
1078 pub gamma: Option<String>,
1079 #[serde(skip_serializing_if = "Option::is_none")]
1080 pub vega: Option<String>,
1081 #[serde(skip_serializing_if = "Option::is_none")]
1082 pub theta: Option<String>,
1083}
1084
1085#[derive(Debug, Clone, Serialize, Deserialize)]
1086#[serde(rename_all = "camelCase")]
1087pub struct TickersResult {
1088 #[serde(skip_serializing_if = "Option::is_none")]
1089 pub category: Option<String>,
1090 #[serde(skip_serializing_if = "Option::is_none")]
1091 pub list: Option<Vec<serde_json::Value>>,
1092}
1093
1094pub type TickersResponse = serde_json::Value;
1095
1096#[derive(Debug, Clone, Serialize, Deserialize)]
1097#[serde(rename_all = "camelCase")]
1098pub struct ServerTimeResult {
1099 pub time_second: String,
1100 pub time_nano: String,
1101}
1102
1103pub type ServerTimeResponse = ServerTimeResult;