1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
7#[serde(rename_all = "camelCase")]
8pub struct WalletBalance {
9 pub list: Vec<AccountBalance>,
11}
12
13#[derive(Debug, Clone, Serialize, Deserialize)]
15#[serde(rename_all = "camelCase")]
16pub struct AccountBalance {
17 pub account_type: String,
19 #[serde(default)]
21 pub account_l_t_v: String,
22 #[serde(default)]
24 pub account_i_m_rate: String,
25 #[serde(default)]
27 pub account_m_m_rate: String,
28 #[serde(default)]
30 pub total_equity: String,
31 #[serde(default)]
33 pub total_wallet_balance: String,
34 #[serde(default)]
36 pub total_margin_balance: String,
37 #[serde(default)]
39 pub total_available_balance: String,
40 #[serde(default)]
42 pub total_perp_u_p_l: String,
43 #[serde(default)]
45 pub total_initial_margin: String,
46 #[serde(default)]
48 pub total_maintenance_margin: String,
49 #[serde(default)]
51 pub coin: Vec<CoinBalance>,
52}
53
54#[derive(Debug, Clone, Serialize, Deserialize)]
56#[serde(rename_all = "camelCase")]
57pub struct CoinBalance {
58 pub coin: String,
60 #[serde(default)]
62 pub equity: String,
63 #[serde(default)]
65 pub usd_value: String,
66 #[serde(default)]
68 pub wallet_balance: String,
69 #[serde(default)]
71 pub free: String,
72 #[serde(default)]
74 pub locked: String,
75 #[serde(default)]
77 pub available_to_withdraw: String,
78 #[serde(default)]
80 pub available_to_borrow: String,
81 #[serde(default)]
83 pub borrow_amount: String,
84 #[serde(default)]
86 pub accrued_interest: String,
87 #[serde(default)]
89 pub total_order_i_m: String,
90 #[serde(default)]
92 pub total_position_i_m: String,
93 #[serde(default)]
95 pub total_position_m_m: String,
96 #[serde(default)]
98 pub unrealised_pnl: String,
99 #[serde(default)]
101 pub cum_realised_pnl: String,
102}
103
104#[derive(Debug, Clone, Serialize, Deserialize)]
106#[serde(rename_all = "camelCase")]
107pub struct AccountInfo {
108 #[serde(default)]
110 pub unified_margin_status: i32,
111 #[serde(default)]
113 pub margin_mode: String,
114 #[serde(default)]
116 pub dcp_status: String,
117 #[serde(default)]
119 pub time_window: i32,
120 #[serde(default)]
122 pub smp_group: i32,
123 #[serde(default)]
125 pub is_master_trader: bool,
126 #[serde(default)]
128 pub spot_hedging_status: String,
129 #[serde(default)]
131 pub updated_time: String,
132}
133
134#[derive(Debug, Clone, Serialize, Deserialize)]
136#[serde(rename_all = "camelCase")]
137pub struct FeeRates {
138 pub category: String,
140 pub list: Vec<FeeRate>,
142}
143
144#[derive(Debug, Clone, Serialize, Deserialize)]
146#[serde(rename_all = "camelCase")]
147pub struct FeeRate {
148 pub symbol: String,
150 #[serde(default)]
152 pub base_coin: String,
153 pub taker_fee_rate: String,
155 pub maker_fee_rate: String,
157}
158
159#[derive(Debug, Clone, Serialize, Deserialize)]
161#[serde(rename_all = "camelCase")]
162pub struct TransactionLogs {
163 pub list: Vec<TransactionLog>,
165 #[serde(default)]
167 pub next_page_cursor: String,
168}
169
170#[derive(Debug, Clone, Serialize, Deserialize)]
172#[serde(rename_all = "camelCase")]
173pub struct TransactionLog {
174 pub id: String,
176 #[serde(default)]
178 pub symbol: String,
179 pub category: String,
181 #[serde(default)]
183 pub side: String,
184 pub transaction_time: String,
186 #[serde(rename = "type")]
188 pub tx_type: String,
189 #[serde(default)]
191 pub qty: String,
192 #[serde(default)]
194 pub size: String,
195 pub currency: String,
197 #[serde(default)]
199 pub trade_price: String,
200 #[serde(default)]
202 pub funding: String,
203 #[serde(default)]
205 pub fee: String,
206 #[serde(default)]
208 pub cash_flow: String,
209 pub change: String,
211 pub cash_balance: String,
213}
214
215#[derive(Debug, Clone, Serialize, Deserialize)]
217#[serde(rename_all = "camelCase")]
218pub struct SetMarginModeParams {
219 pub set_margin_mode: String,
221}
222
223#[derive(Debug, Clone, Serialize, Deserialize)]
225#[serde(rename_all = "camelCase")]
226pub struct CollateralInfo {
227 pub list: Vec<Collateral>,
229}
230
231#[derive(Debug, Clone, Serialize, Deserialize)]
233#[serde(rename_all = "camelCase")]
234pub struct Collateral {
235 pub currency: String,
237 #[serde(default)]
239 pub hourly_borrow_rate: String,
240 #[serde(default)]
242 pub max_borrowing_amount: String,
243 #[serde(default)]
245 pub free_borrowing_amount: String,
246 #[serde(default)]
248 pub free_borrow_limit: String,
249 #[serde(default)]
251 pub borrow_usable_switch: bool,
252 #[serde(default)]
254 pub collateral_switch: bool,
255 #[serde(default)]
257 pub collateral_ratio: String,
258}
259
260#[derive(Debug, Clone, Serialize, Deserialize)]
262#[serde(rename_all = "camelCase")]
263pub struct BorrowHistory {
264 pub list: Vec<BorrowRecord>,
266 #[serde(default)]
268 pub next_page_cursor: String,
269}
270
271#[derive(Debug, Clone, Serialize, Deserialize)]
273#[serde(rename_all = "camelCase")]
274pub struct BorrowRecord {
275 pub currency: String,
277 pub created_time: String,
279 #[serde(default)]
281 pub borrow_cost: String,
282 #[serde(default)]
284 pub hourly_borrow_rate: String,
285 #[serde(default)]
287 pub interest_bearing_borrow_size: String,
288 #[serde(default)]
290 pub cost_exemption: String,
291}
292
293pub type QueryDcpInfoResponse = serde_json::Value;
294
295#[derive(Debug, Clone, Serialize, Deserialize)]
296#[serde(rename_all = "camelCase")]
297pub struct BizDcpInfo {
298 #[serde(skip_serializing_if = "Option::is_none")]
299 pub product: Option<String>,
300 #[serde(skip_serializing_if = "Option::is_none")]
301 pub dcp_status: Option<String>,
302 #[serde(skip_serializing_if = "Option::is_none")]
303 pub time_window: Option<String>,
304}
305
306pub type SmpGroupIdQueryByUidResponse = serde_json::Value;
307
308#[derive(Debug, Clone, Serialize, Deserialize)]
309#[serde(rename_all = "camelCase")]
310pub struct FeeRateEntity {
311 #[serde(skip_serializing_if = "Option::is_none")]
312 pub base_coin: Option<String>,
313 #[serde(skip_serializing_if = "Option::is_none")]
314 pub symbol: Option<String>,
315 #[serde(skip_serializing_if = "Option::is_none")]
316 pub taker_fee_rate: Option<String>,
317 #[serde(skip_serializing_if = "Option::is_none")]
318 pub maker_fee_rate: Option<String>,
319}
320
321#[derive(Debug, Clone, Serialize, Deserialize)]
322#[serde(rename_all = "camelCase")]
323pub struct GetGroupFeeRateResponse {
324 #[serde(skip_serializing_if = "Option::is_none")]
325 pub group_name: Option<String>,
326 #[serde(skip_serializing_if = "Option::is_none")]
327 pub weighting_factor: Option<i32>,
328 #[serde(skip_serializing_if = "Option::is_none")]
329 pub symbols_numbers: Option<i32>,
330 #[serde(skip_serializing_if = "Option::is_none")]
331 pub symbols: Option<Vec<String>>,
332 #[serde(skip_serializing_if = "Option::is_none")]
333 pub fee_rates: Option<FeeRateDetailMap>,
334 #[serde(skip_serializing_if = "Option::is_none")]
335 pub update_time: Option<i64>,
336}
337
338#[derive(Debug, Clone, Serialize, Deserialize)]
339#[serde(rename_all = "camelCase")]
340pub struct FeeRateDetailMap {
341 #[serde(skip_serializing_if = "Option::is_none")]
342 pub pro: Option<Vec<FeeRateDetail>>,
343 #[serde(skip_serializing_if = "Option::is_none")]
344 pub market_maker: Option<Vec<FeeRateDetail>>,
345}
346
347#[derive(Debug, Clone, Serialize, Deserialize)]
348#[serde(rename_all = "camelCase")]
349pub struct FeeRateDetail {
350 #[serde(skip_serializing_if = "Option::is_none")]
351 pub level: Option<String>,
352 #[serde(skip_serializing_if = "Option::is_none")]
353 pub taker_fee_rate: Option<String>,
354 #[serde(skip_serializing_if = "Option::is_none")]
355 pub maker_fee_rate: Option<String>,
356 #[serde(skip_serializing_if = "Option::is_none")]
357 pub maker_rebate: Option<String>,
358}
359
360#[derive(Debug, Clone, Serialize, Deserialize)]
361#[serde(rename_all = "camelCase")]
362pub struct ApiError {
363 #[serde(skip_serializing_if = "Option::is_none")]
364 pub ret_code: Option<i32>,
365 #[serde(skip_serializing_if = "Option::is_none")]
366 pub ret_msg: Option<String>,
367}
368
369#[derive(Debug, Clone, Serialize, Deserialize)]
370#[serde(rename_all = "camelCase")]
371pub struct BatchSetCollateralRequestItem {
372 pub coin: String,
373 pub collateral_switch: String,
374}
375
376#[derive(Debug, Clone, Serialize, Deserialize)]
377#[serde(rename_all = "camelCase")]
378pub struct BatchSetCollateralParams {
379 pub request: Vec<BatchSetCollateralRequestItem>,
380}
381
382#[derive(Debug, Clone, Serialize, Deserialize)]
383#[serde(rename_all = "camelCase")]
384pub struct BatchSetCollateralResultItem {
385 #[serde(skip_serializing_if = "Option::is_none")]
386 pub coin: Option<String>,
387 #[serde(skip_serializing_if = "Option::is_none")]
388 pub collateral_switch: Option<String>,
389}
390
391#[derive(Debug, Clone, Serialize, Deserialize)]
392#[serde(rename_all = "camelCase")]
393pub struct BatchSetCollateralResult {
394 #[serde(skip_serializing_if = "Option::is_none")]
395 pub list: Option<Vec<BatchSetCollateralResultItem>>,
396}
397
398pub type BatchSetCollateralResponse = BatchSetCollateralResult;
399
400pub type GetAccountInfoResponse = GetAccountInfoResult;
401
402#[derive(Debug, Clone, Serialize, Deserialize)]
403#[serde(rename_all = "camelCase")]
404pub struct GetAccountInfoResult {
405 #[serde(skip_serializing_if = "Option::is_none")]
406 pub unified_margin_status: Option<i32>,
407 #[serde(skip_serializing_if = "Option::is_none")]
408 pub margin_mode: Option<String>,
409 #[serde(skip_serializing_if = "Option::is_none")]
410 pub is_master_trader: Option<bool>,
411 #[serde(skip_serializing_if = "Option::is_none")]
412 pub spot_hedging_status: Option<String>,
413 #[serde(skip_serializing_if = "Option::is_none")]
414 pub updated_time: Option<String>,
415 #[serde(skip_serializing_if = "Option::is_none")]
416 pub dcp_status: Option<String>,
417 #[serde(skip_serializing_if = "Option::is_none")]
418 pub time_window: Option<i32>,
419 #[serde(skip_serializing_if = "Option::is_none")]
420 pub smp_group: Option<i32>,
421}
422
423pub type GetAccountInstrumentsResponse = GetAccountInstrumentsResult;
424
425#[derive(Debug, Clone, Serialize, Deserialize)]
426#[serde(rename_all = "camelCase")]
427pub struct GetAccountInstrumentsResult {
428 #[serde(skip_serializing_if = "Option::is_none")]
429 pub category: Option<String>,
430 #[serde(skip_serializing_if = "Option::is_none")]
431 pub next_page_cursor: Option<String>,
432 #[serde(skip_serializing_if = "Option::is_none")]
433 pub list: Option<Vec<GetAccountInstrumentsItem>>,
434}
435
436#[derive(Debug, Clone, Serialize, Deserialize)]
437#[serde(rename_all = "camelCase")]
438pub struct GetAccountInstrumentsItem {
439 #[serde(skip_serializing_if = "Option::is_none")]
440 pub symbol: Option<String>,
441 #[serde(skip_serializing_if = "Option::is_none")]
442 pub contract_type: Option<String>,
443 #[serde(skip_serializing_if = "Option::is_none")]
444 pub status: Option<String>,
445 #[serde(skip_serializing_if = "Option::is_none")]
446 pub base_coin: Option<String>,
447 #[serde(skip_serializing_if = "Option::is_none")]
448 pub quote_coin: Option<String>,
449 #[serde(skip_serializing_if = "Option::is_none")]
450 pub launch_time: Option<String>,
451 #[serde(skip_serializing_if = "Option::is_none")]
452 pub delivery_time: Option<String>,
453 #[serde(skip_serializing_if = "Option::is_none")]
454 pub delivery_fee_rate: Option<String>,
455 #[serde(skip_serializing_if = "Option::is_none")]
456 pub price_scale: Option<String>,
457 #[serde(skip_serializing_if = "Option::is_none")]
458 pub leverage_filter: Option<GetAccountInstrumentsLeverageFilter>,
459 #[serde(skip_serializing_if = "Option::is_none")]
460 pub price_filter: Option<GetAccountInstrumentsPriceFilter>,
461 #[serde(skip_serializing_if = "Option::is_none")]
462 pub lot_size_filter: Option<GetAccountInstrumentsLotSizeFilter>,
463 #[serde(skip_serializing_if = "Option::is_none")]
464 pub unified_margin_trade: Option<bool>,
465 #[serde(skip_serializing_if = "Option::is_none")]
466 pub funding_interval: Option<i32>,
467 #[serde(skip_serializing_if = "Option::is_none")]
468 pub settle_coin: Option<String>,
469 #[serde(skip_serializing_if = "Option::is_none")]
470 pub copy_trading: Option<String>,
471 #[serde(skip_serializing_if = "Option::is_none")]
472 pub upper_funding_rate: Option<String>,
473 #[serde(skip_serializing_if = "Option::is_none")]
474 pub lower_funding_rate: Option<String>,
475 #[serde(skip_serializing_if = "Option::is_none")]
476 pub margin_trading: Option<String>,
477 #[serde(skip_serializing_if = "Option::is_none")]
478 pub st_tag: Option<String>,
479 #[serde(skip_serializing_if = "Option::is_none")]
480 pub risk_parameters: Option<GetAccountInstrumentsRiskParameters>,
481 #[serde(skip_serializing_if = "Option::is_none")]
482 pub symbol_type: Option<String>,
483 #[serde(skip_serializing_if = "Option::is_none")]
484 pub display_name: Option<String>,
485 #[serde(skip_serializing_if = "Option::is_none")]
486 pub innovation: Option<String>,
487 #[serde(skip_serializing_if = "Option::is_none")]
491 pub pre_listing_info: Option<serde_json::Value>,
492 #[serde(skip_serializing_if = "Option::is_none")]
493 pub is_pre_listing: Option<bool>,
494 #[serde(skip_serializing_if = "Option::is_none")]
495 pub my_rpi_permission: Option<bool>,
496 #[serde(skip_serializing_if = "Option::is_none")]
497 pub is_public_rpi: Option<bool>,
498}
499
500#[derive(Debug, Clone, Serialize, Deserialize)]
501#[serde(rename_all = "camelCase")]
502pub struct GetAccountInstrumentsLeverageFilter {
503 #[serde(skip_serializing_if = "Option::is_none")]
504 pub min_leverage: Option<String>,
505 #[serde(skip_serializing_if = "Option::is_none")]
506 pub max_leverage: Option<String>,
507 #[serde(skip_serializing_if = "Option::is_none")]
508 pub leverage_step: Option<String>,
509}
510
511#[derive(Debug, Clone, Serialize, Deserialize)]
512#[serde(rename_all = "camelCase")]
513pub struct GetAccountInstrumentsPriceFilter {
514 #[serde(skip_serializing_if = "Option::is_none")]
515 pub min_price: Option<String>,
516 #[serde(skip_serializing_if = "Option::is_none")]
517 pub max_price: Option<String>,
518 #[serde(skip_serializing_if = "Option::is_none")]
519 pub tick_size: Option<String>,
520}
521
522#[derive(Debug, Clone, Serialize, Deserialize)]
523#[serde(rename_all = "camelCase")]
524pub struct GetAccountInstrumentsLotSizeFilter {
525 #[serde(skip_serializing_if = "Option::is_none")]
526 pub max_order_qty: Option<String>,
527 #[serde(skip_serializing_if = "Option::is_none")]
528 pub max_mkt_order_qty: Option<String>,
529 #[serde(skip_serializing_if = "Option::is_none")]
530 pub min_order_qty: Option<String>,
531 #[serde(skip_serializing_if = "Option::is_none")]
532 pub qty_step: Option<String>,
533 #[serde(skip_serializing_if = "Option::is_none")]
534 pub min_notional_value: Option<String>,
535 #[serde(skip_serializing_if = "Option::is_none")]
536 pub base_precision: Option<String>,
537 #[serde(skip_serializing_if = "Option::is_none")]
538 pub quote_precision: Option<String>,
539 #[serde(skip_serializing_if = "Option::is_none")]
540 pub min_order_amt: Option<String>,
541 #[serde(skip_serializing_if = "Option::is_none")]
542 pub max_limit_order_qty: Option<String>,
543 #[serde(skip_serializing_if = "Option::is_none")]
544 pub max_market_order_qty: Option<String>,
545 #[serde(skip_serializing_if = "Option::is_none")]
546 pub post_only_max_limit_order_size: Option<String>,
547 #[serde(skip_serializing_if = "Option::is_none")]
548 pub max_order_amt: Option<String>,
549 #[serde(skip_serializing_if = "Option::is_none")]
550 pub post_only_max_order_qty: Option<String>,
551}
552
553#[derive(Debug, Clone, Serialize, Deserialize)]
554#[serde(rename_all = "camelCase")]
555pub struct GetAccountInstrumentsRiskParameters {
556 #[serde(skip_serializing_if = "Option::is_none")]
557 pub price_limit_ratio_x: Option<String>,
558 #[serde(skip_serializing_if = "Option::is_none")]
559 pub price_limit_ratio_y: Option<String>,
560}
561
562pub type GetBorrowHistoryResponse = GetBorrowHistoryResult;
563
564#[derive(Debug, Clone, Serialize, Deserialize)]
565#[serde(rename_all = "camelCase")]
566pub struct GetBorrowHistoryResult {
567 #[serde(skip_serializing_if = "Option::is_none")]
568 pub list: Option<Vec<BorrowHistoryItem>>,
569 #[serde(skip_serializing_if = "Option::is_none")]
570 pub next_page_cursor: Option<String>,
571}
572
573#[derive(Debug, Clone, Serialize, Deserialize)]
574#[serde(rename_all = "camelCase")]
575pub struct BorrowHistoryItem {
576 #[serde(skip_serializing_if = "Option::is_none")]
577 pub currency: Option<String>,
578 #[serde(skip_serializing_if = "Option::is_none")]
579 pub created_time: Option<i64>,
580 #[serde(skip_serializing_if = "Option::is_none")]
581 pub borrow_cost: Option<String>,
582 #[serde(skip_serializing_if = "Option::is_none")]
583 pub hourly_borrow_rate: Option<String>,
584 #[serde(
585 rename = "InterestBearingBorrowSize",
586 skip_serializing_if = "Option::is_none"
587 )]
588 pub interest_bearing_borrow_size: Option<String>,
589 #[serde(skip_serializing_if = "Option::is_none")]
590 pub cost_exemption: Option<String>,
591 #[serde(skip_serializing_if = "Option::is_none")]
592 pub borrow_amount: Option<String>,
593 #[serde(skip_serializing_if = "Option::is_none")]
594 pub unrealised_loss: Option<String>,
595 #[serde(skip_serializing_if = "Option::is_none")]
596 pub free_borrowed_amount: Option<String>,
597}
598
599#[derive(Debug, Clone, Serialize, Deserialize)]
600#[serde(rename_all = "camelCase")]
601pub struct ManualBorrowParams {
602 pub coin: String,
603 pub amount: String,
604}
605
606#[derive(Debug, Clone, Serialize, Deserialize)]
607#[serde(rename_all = "camelCase")]
608pub struct ManualRepayParams {
609 #[serde(skip_serializing_if = "Option::is_none")]
610 pub coin: Option<String>,
611 #[serde(skip_serializing_if = "Option::is_none")]
612 pub amount: Option<String>,
613}
614
615#[derive(Debug, Clone, Serialize, Deserialize)]
616#[serde(rename_all = "camelCase")]
617pub struct NoConvertRepayParams {
618 pub coin: String,
619 #[serde(skip_serializing_if = "Option::is_none")]
620 pub amount: Option<String>,
621}
622
623#[derive(Debug, Clone, Serialize, Deserialize)]
624#[serde(rename_all = "camelCase")]
625pub struct OneClickRepayParams {
626 #[serde(skip_serializing_if = "Option::is_none")]
627 pub coin: Option<String>,
628}
629
630#[derive(Debug, Clone, Serialize, Deserialize)]
631#[serde(rename_all = "camelCase")]
632pub struct ResetMmpParams {
633 pub base_coin: String,
634}
635
636pub type ResetMmpResponse = serde_json::Value;
637
638#[derive(Debug, Clone, Serialize, Deserialize)]
639#[serde(rename_all = "camelCase")]
640pub struct SetCollateralCoinParams {
641 pub coin: String,
642 pub collateral_switch: String,
643}
644
645#[derive(Debug, Clone, Serialize, Deserialize)]
646#[serde(rename_all = "camelCase")]
647pub struct SetMmpParams {
648 pub base_coin: String,
649 pub window: String,
650 pub frozen_period: String,
651 pub qty_limit: String,
652 pub delta_limit: String,
653}
654
655pub type SetMmpResponse = serde_json::Value;
656
657#[derive(Debug, Clone, Serialize, Deserialize)]
658#[serde(rename_all = "camelCase")]
659pub struct SetPriceLimitParams {
660 pub category: String,
661 pub modify_enable: bool,
662}
663
664pub type SetPriceLimitResponse = serde_json::Value;
665
666#[derive(Debug, Clone, Serialize, Deserialize)]
667#[serde(rename_all = "camelCase")]
668pub struct SetSpotHedgingParams {
669 pub set_hedging_mode: String,
670}
671
672pub type SetSpotHedgingResponse = serde_json::Value;
673
674pub type UpgradeToUtaProResponse = serde_json::Value;
675
676pub type GetCoinGreeksResponse = GetCoinGreeksResult;
677
678#[derive(Debug, Clone, Serialize, Deserialize)]
679#[serde(rename_all = "camelCase")]
680pub struct GetCoinGreeksResult {
681 #[serde(skip_serializing_if = "Option::is_none")]
682 pub list: Option<Vec<CoinGreeksItem>>,
683}
684
685#[derive(Debug, Clone, Serialize, Deserialize)]
686#[serde(rename_all = "camelCase")]
687pub struct CoinGreeksItem {
688 #[serde(skip_serializing_if = "Option::is_none")]
689 pub base_coin: Option<String>,
690 #[serde(skip_serializing_if = "Option::is_none")]
691 pub total_delta: Option<String>,
692 #[serde(skip_serializing_if = "Option::is_none")]
693 pub total_gamma: Option<String>,
694 #[serde(skip_serializing_if = "Option::is_none")]
695 pub total_vega: Option<String>,
696 #[serde(skip_serializing_if = "Option::is_none")]
697 pub total_theta: Option<String>,
698}
699
700pub type GetCollateralInfoResponse = CollateralInfoResult;
701
702#[derive(Debug, Clone, Serialize, Deserialize)]
703#[serde(rename_all = "camelCase")]
704pub struct CollateralInfoResult {
705 #[serde(skip_serializing_if = "Option::is_none")]
706 pub list: Option<Vec<CollateralInfoItem>>,
707}
708
709#[derive(Debug, Clone, Serialize, Deserialize)]
710#[serde(rename_all = "camelCase")]
711pub struct CollateralInfoItem {
712 #[serde(skip_serializing_if = "Option::is_none")]
713 pub currency: Option<String>,
714 #[serde(skip_serializing_if = "Option::is_none")]
715 pub hourly_borrow_rate: Option<String>,
716 #[serde(skip_serializing_if = "Option::is_none")]
717 pub max_borrowing_amount: Option<String>,
718 #[serde(skip_serializing_if = "Option::is_none")]
719 pub free_borrowing_limit: Option<String>,
720 #[serde(skip_serializing_if = "Option::is_none")]
721 pub free_borrow_amount: Option<String>,
722 #[serde(skip_serializing_if = "Option::is_none")]
723 pub borrow_amount: Option<String>,
724 #[serde(skip_serializing_if = "Option::is_none")]
725 pub other_borrow_amount: Option<String>,
726 #[serde(skip_serializing_if = "Option::is_none")]
727 pub available_to_borrow: Option<String>,
728 #[serde(skip_serializing_if = "Option::is_none")]
729 pub borrowable: Option<bool>,
730 #[serde(skip_serializing_if = "Option::is_none")]
731 pub borrow_usage_rate: Option<String>,
732 #[serde(skip_serializing_if = "Option::is_none")]
733 pub margin_collateral: Option<bool>,
734 #[serde(skip_serializing_if = "Option::is_none")]
735 pub collateral_switch: Option<bool>,
736 #[serde(skip_serializing_if = "Option::is_none")]
737 pub free_borrowing_amount: Option<String>,
738 #[serde(skip_serializing_if = "Option::is_none")]
739 pub collateral_ratio: Option<String>,
740}
741
742pub type GetDcpInfoResponse = GetDcpInfoResult;
743
744#[derive(Debug, Clone, Serialize, Deserialize)]
745#[serde(rename_all = "camelCase")]
746pub struct GetDcpInfoResult {
747 #[serde(skip_serializing_if = "Option::is_none")]
748 pub dcp_infos: Option<Vec<DcpInfo>>,
749}
750
751#[derive(Debug, Clone, Serialize, Deserialize)]
752#[serde(rename_all = "camelCase")]
753pub struct DcpInfo {
754 #[serde(skip_serializing_if = "Option::is_none")]
755 pub product: Option<String>,
756 #[serde(skip_serializing_if = "Option::is_none")]
757 pub dcp_status: Option<String>,
758 #[serde(skip_serializing_if = "Option::is_none")]
759 pub time_window: Option<String>,
760}
761
762pub type GetFeeRateResponse = GetFeeRateResult;
763
764#[derive(Debug, Clone, Serialize, Deserialize)]
765#[serde(rename_all = "camelCase")]
766pub struct GetFeeRateResult {
767 #[serde(skip_serializing_if = "Option::is_none")]
768 pub category: Option<String>,
769 #[serde(skip_serializing_if = "Option::is_none")]
770 pub list: Option<Vec<GetFeeRateItem>>,
771}
772
773#[derive(Debug, Clone, Serialize, Deserialize)]
774#[serde(rename_all = "camelCase")]
775pub struct GetFeeRateItem {
776 #[serde(skip_serializing_if = "Option::is_none")]
777 pub symbol: Option<String>,
778 #[serde(skip_serializing_if = "Option::is_none")]
779 pub base_coin: Option<String>,
780 #[serde(skip_serializing_if = "Option::is_none")]
781 pub taker_fee_rate: Option<String>,
782 #[serde(skip_serializing_if = "Option::is_none")]
783 pub maker_fee_rate: Option<String>,
784}
785
786pub type GetMmpStateResponse = MmpStateResult;
787
788#[derive(Debug, Clone, Serialize, Deserialize)]
789#[serde(rename_all = "camelCase")]
790pub struct MmpStateResult {
791 #[serde(skip_serializing_if = "Option::is_none")]
792 pub result: Option<Vec<MmpStateItem>>,
793}
794
795#[derive(Debug, Clone, Serialize, Deserialize)]
796#[serde(rename_all = "camelCase")]
797pub struct MmpStateItem {
798 #[serde(skip_serializing_if = "Option::is_none")]
799 pub base_coin: Option<String>,
800 #[serde(skip_serializing_if = "Option::is_none")]
801 pub mmp_enabled: Option<bool>,
802 #[serde(skip_serializing_if = "Option::is_none")]
803 pub window: Option<String>,
804 #[serde(skip_serializing_if = "Option::is_none")]
805 pub frozen_period: Option<String>,
806 #[serde(skip_serializing_if = "Option::is_none")]
807 pub qty_limit: Option<String>,
808 #[serde(skip_serializing_if = "Option::is_none")]
809 pub delta_limit: Option<String>,
810 #[serde(skip_serializing_if = "Option::is_none")]
811 pub mmp_frozen_until: Option<String>,
812 #[serde(skip_serializing_if = "Option::is_none")]
813 pub mmp_frozen: Option<bool>,
814}
815
816pub type GetSmpGroupResponse = GetSmpGroupResult;
817
818#[derive(Debug, Clone, Serialize, Deserialize)]
819#[serde(rename_all = "camelCase")]
820pub struct GetSmpGroupResult {
821 #[serde(skip_serializing_if = "Option::is_none")]
822 pub smp_group: Option<i32>,
823}
824
825pub type GetTransactionLogResponse = TransactionLogResult;
826
827#[derive(Debug, Clone, Serialize, Deserialize)]
828#[serde(rename_all = "camelCase")]
829pub struct TransactionLogResult {
830 #[serde(skip_serializing_if = "Option::is_none")]
831 pub list: Option<Vec<TransactionLogEntry>>,
832 #[serde(skip_serializing_if = "Option::is_none")]
833 pub next_page_cursor: Option<String>,
834}
835
836#[derive(Debug, Clone, Serialize, Deserialize)]
837#[serde(rename_all = "camelCase")]
838pub struct TransactionLogEntry {
839 #[serde(skip_serializing_if = "Option::is_none")]
840 pub id: Option<String>,
841 #[serde(skip_serializing_if = "Option::is_none")]
842 pub symbol: Option<String>,
843 #[serde(skip_serializing_if = "Option::is_none")]
844 pub category: Option<String>,
845 #[serde(skip_serializing_if = "Option::is_none")]
846 pub side: Option<String>,
847 #[serde(skip_serializing_if = "Option::is_none")]
848 pub transaction_time: Option<String>,
849 #[serde(rename = "type", skip_serializing_if = "Option::is_none")]
850 pub type_: Option<String>,
851 #[serde(skip_serializing_if = "Option::is_none")]
852 pub trans_sub_type: Option<String>,
853 #[serde(skip_serializing_if = "Option::is_none")]
854 pub qty: Option<String>,
855 #[serde(skip_serializing_if = "Option::is_none")]
856 pub size: Option<String>,
857 #[serde(skip_serializing_if = "Option::is_none")]
858 pub currency: Option<String>,
859 #[serde(skip_serializing_if = "Option::is_none")]
860 pub trade_price: Option<String>,
861 #[serde(skip_serializing_if = "Option::is_none")]
862 pub funding: Option<String>,
863 #[serde(skip_serializing_if = "Option::is_none")]
864 pub fee: Option<String>,
865 #[serde(skip_serializing_if = "Option::is_none")]
866 pub cash_flow: Option<String>,
867 #[serde(skip_serializing_if = "Option::is_none")]
868 pub change: Option<String>,
869 #[serde(skip_serializing_if = "Option::is_none")]
870 pub cash_balance: Option<String>,
871 #[serde(skip_serializing_if = "Option::is_none")]
872 pub fee_rate: Option<String>,
873 #[serde(skip_serializing_if = "Option::is_none")]
874 pub bonus_change: Option<String>,
875 #[serde(skip_serializing_if = "Option::is_none")]
876 pub trade_id: Option<String>,
877 #[serde(skip_serializing_if = "Option::is_none")]
878 pub order_id: Option<String>,
879 #[serde(skip_serializing_if = "Option::is_none")]
880 pub order_link_id: Option<String>,
881 #[serde(skip_serializing_if = "Option::is_none")]
882 pub extra_fees: Option<String>,
883}
884
885pub type GetTransferableAmountResponse = GetTransferableAmountResult;
886
887#[derive(Debug, Clone, Serialize, Deserialize)]
888#[serde(rename_all = "camelCase")]
889pub struct GetTransferableAmountResult {
890 #[serde(skip_serializing_if = "Option::is_none")]
891 pub available_withdrawal: Option<String>,
892 #[serde(skip_serializing_if = "Option::is_none")]
893 pub available_withdrawal_map: Option<std::collections::HashMap<String, String>>,
894}
895
896pub type GetUserSettingsResponse = GetUserSettingsResult;
897
898#[derive(Debug, Clone, Serialize, Deserialize)]
899#[serde(rename_all = "camelCase")]
900pub struct GetUserSettingsResult {
901 #[serde(skip_serializing_if = "Option::is_none")]
902 pub lpa_spot: Option<bool>,
903 #[serde(skip_serializing_if = "Option::is_none")]
904 pub lpa_perp: Option<bool>,
905}
906
907pub type ManualBorrowResponse = serde_json::Value;
908
909#[derive(Debug, Clone, Serialize, Deserialize)]
910#[serde(rename_all = "camelCase")]
911pub struct ManualBorrowResult {
912 #[serde(skip_serializing_if = "Option::is_none")]
913 pub coin: Option<String>,
914 #[serde(skip_serializing_if = "Option::is_none")]
915 pub amount: Option<String>,
916}
917
918pub type ManualRepayResponse = ManualRepayResult;
919
920#[derive(Debug, Clone, Serialize, Deserialize)]
921#[serde(rename_all = "camelCase")]
922pub struct ManualRepayResult {
923 #[serde(skip_serializing_if = "Option::is_none")]
924 pub result_status: Option<String>,
925}
926
927pub type NoConvertRepayResponse = NoConvertRepayResult;
928
929#[derive(Debug, Clone, Serialize, Deserialize)]
930#[serde(rename_all = "camelCase")]
931pub struct NoConvertRepayResult {
932 #[serde(skip_serializing_if = "Option::is_none")]
933 pub result_status: Option<String>,
934}
935
936pub type OneClickRepayResponse = OneClickRepayResult;
937
938#[derive(Debug, Clone, Serialize, Deserialize)]
939#[serde(rename_all = "camelCase")]
940pub struct OneClickRepayResult {
941 #[serde(skip_serializing_if = "Option::is_none")]
942 pub list: Option<Vec<OneClickRepayItem>>,
943}
944
945#[derive(Debug, Clone, Serialize, Deserialize)]
946#[serde(rename_all = "camelCase")]
947pub struct OneClickRepayItem {
948 #[serde(skip_serializing_if = "Option::is_none")]
949 pub coin: Option<String>,
950 #[serde(skip_serializing_if = "Option::is_none")]
951 pub repayment_qty: Option<String>,
952}
953
954pub type SetMarginModeResponse = SetMarginModeResult;
955
956#[derive(Debug, Clone, Serialize, Deserialize)]
957#[serde(rename_all = "camelCase")]
958pub struct SetMarginModeResult {
959 #[serde(skip_serializing_if = "Option::is_none")]
960 pub reasons: Option<Vec<SetMarginModeReason>>,
961}
962
963#[derive(Debug, Clone, Serialize, Deserialize)]
964#[serde(rename_all = "camelCase")]
965pub struct SetMarginModeReason {
966 #[serde(skip_serializing_if = "Option::is_none")]
967 pub reason_code: Option<String>,
968 #[serde(skip_serializing_if = "Option::is_none")]
969 pub reason_msg: Option<String>,
970}
971
972#[derive(Debug, Clone, Serialize, Deserialize)]
973#[serde(rename_all = "camelCase")]
974pub struct UpgradeToUtaProResult {
975 #[serde(skip_serializing_if = "Option::is_none")]
976 pub unified_update_status: Option<String>,
977 #[serde(skip_serializing_if = "Option::is_none")]
978 pub unified_update_msg: Option<UpgradeToUtaProMsg>,
979}
980
981#[derive(Debug, Clone, Serialize, Deserialize)]
982#[serde(rename_all = "camelCase")]
983pub struct UpgradeToUtaProMsg {
984 #[serde(skip_serializing_if = "Option::is_none")]
985 pub msg: Option<Vec<String>>,
986}