Skip to main content

bybit_api/models/
account.rs

1//! Account models.
2
3use serde::{Deserialize, Serialize};
4
5/// Wallet balance response.
6#[derive(Debug, Clone, Serialize, Deserialize)]
7#[serde(rename_all = "camelCase")]
8pub struct WalletBalance {
9    /// List of account balances
10    pub list: Vec<AccountBalance>,
11}
12
13/// Account balance.
14#[derive(Debug, Clone, Serialize, Deserialize)]
15#[serde(rename_all = "camelCase")]
16pub struct AccountBalance {
17    /// Account type
18    pub account_type: String,
19    /// Account LTV
20    #[serde(default)]
21    pub account_l_t_v: String,
22    /// Account IM rate
23    #[serde(default)]
24    pub account_i_m_rate: String,
25    /// Account MM rate
26    #[serde(default)]
27    pub account_m_m_rate: String,
28    /// Total equity
29    #[serde(default)]
30    pub total_equity: String,
31    /// Total wallet balance
32    #[serde(default)]
33    pub total_wallet_balance: String,
34    /// Total margin balance
35    #[serde(default)]
36    pub total_margin_balance: String,
37    /// Total available balance
38    #[serde(default)]
39    pub total_available_balance: String,
40    /// Total perp UPL
41    #[serde(default)]
42    pub total_perp_u_p_l: String,
43    /// Total initial margin
44    #[serde(default)]
45    pub total_initial_margin: String,
46    /// Total maintenance margin
47    #[serde(default)]
48    pub total_maintenance_margin: String,
49    /// Coin list
50    #[serde(default)]
51    pub coin: Vec<CoinBalance>,
52}
53
54/// Coin balance.
55#[derive(Debug, Clone, Serialize, Deserialize)]
56#[serde(rename_all = "camelCase")]
57pub struct CoinBalance {
58    /// Coin name
59    pub coin: String,
60    /// Equity
61    #[serde(default)]
62    pub equity: String,
63    /// USD value
64    #[serde(default)]
65    pub usd_value: String,
66    /// Wallet balance
67    #[serde(default)]
68    pub wallet_balance: String,
69    /// Free amount
70    #[serde(default)]
71    pub free: String,
72    /// Locked amount
73    #[serde(default)]
74    pub locked: String,
75    /// Available to withdraw
76    #[serde(default)]
77    pub available_to_withdraw: String,
78    /// Available to borrow
79    #[serde(default)]
80    pub available_to_borrow: String,
81    /// Borrow amount
82    #[serde(default)]
83    pub borrow_amount: String,
84    /// Accrued interest
85    #[serde(default)]
86    pub accrued_interest: String,
87    /// Total order IM
88    #[serde(default)]
89    pub total_order_i_m: String,
90    /// Total position IM
91    #[serde(default)]
92    pub total_position_i_m: String,
93    /// Total position MM
94    #[serde(default)]
95    pub total_position_m_m: String,
96    /// Unrealised PnL
97    #[serde(default)]
98    pub unrealised_pnl: String,
99    /// Cumulative realised PnL
100    #[serde(default)]
101    pub cum_realised_pnl: String,
102}
103
104/// Account info response.
105#[derive(Debug, Clone, Serialize, Deserialize)]
106#[serde(rename_all = "camelCase")]
107pub struct AccountInfo {
108    /// Unified margin status
109    #[serde(default)]
110    pub unified_margin_status: i32,
111    /// Margin mode
112    #[serde(default)]
113    pub margin_mode: String,
114    /// DCP status
115    #[serde(default)]
116    pub dcp_status: String,
117    /// Time window
118    #[serde(default)]
119    pub time_window: i32,
120    /// SMP group
121    #[serde(default)]
122    pub smp_group: i32,
123    /// Is master trader
124    #[serde(default)]
125    pub is_master_trader: bool,
126    /// Spot hedging status
127    #[serde(default)]
128    pub spot_hedging_status: String,
129    /// Updated time
130    #[serde(default)]
131    pub updated_time: String,
132}
133
134/// Fee rate response.
135#[derive(Debug, Clone, Serialize, Deserialize)]
136#[serde(rename_all = "camelCase")]
137pub struct FeeRates {
138    /// Category
139    pub category: String,
140    /// List of fee rates
141    pub list: Vec<FeeRate>,
142}
143
144/// Fee rate.
145#[derive(Debug, Clone, Serialize, Deserialize)]
146#[serde(rename_all = "camelCase")]
147pub struct FeeRate {
148    /// Symbol
149    pub symbol: String,
150    /// Base coin
151    #[serde(default)]
152    pub base_coin: String,
153    /// Taker fee rate
154    pub taker_fee_rate: String,
155    /// Maker fee rate
156    pub maker_fee_rate: String,
157}
158
159/// Transaction log response.
160#[derive(Debug, Clone, Serialize, Deserialize)]
161#[serde(rename_all = "camelCase")]
162pub struct TransactionLogs {
163    /// List of transactions
164    pub list: Vec<TransactionLog>,
165    /// Next page cursor
166    #[serde(default)]
167    pub next_page_cursor: String,
168}
169
170/// Transaction log.
171#[derive(Debug, Clone, Serialize, Deserialize)]
172#[serde(rename_all = "camelCase")]
173pub struct TransactionLog {
174    /// ID
175    pub id: String,
176    /// Symbol
177    #[serde(default)]
178    pub symbol: String,
179    /// Category
180    pub category: String,
181    /// Side
182    #[serde(default)]
183    pub side: String,
184    /// Transaction time
185    pub transaction_time: String,
186    /// Type
187    #[serde(rename = "type")]
188    pub tx_type: String,
189    /// Qty
190    #[serde(default)]
191    pub qty: String,
192    /// Size
193    #[serde(default)]
194    pub size: String,
195    /// Currency
196    pub currency: String,
197    /// Trade price
198    #[serde(default)]
199    pub trade_price: String,
200    /// Funding
201    #[serde(default)]
202    pub funding: String,
203    /// Fee
204    #[serde(default)]
205    pub fee: String,
206    /// Cash flow
207    #[serde(default)]
208    pub cash_flow: String,
209    /// Change
210    pub change: String,
211    /// Cash balance
212    pub cash_balance: String,
213}
214
215/// Set margin mode request.
216#[derive(Debug, Clone, Serialize, Deserialize)]
217#[serde(rename_all = "camelCase")]
218pub struct SetMarginModeParams {
219    /// Set margin mode
220    pub set_margin_mode: String,
221}
222
223/// Collateral info response.
224#[derive(Debug, Clone, Serialize, Deserialize)]
225#[serde(rename_all = "camelCase")]
226pub struct CollateralInfo {
227    /// List of collateral info
228    pub list: Vec<Collateral>,
229}
230
231/// Collateral.
232#[derive(Debug, Clone, Serialize, Deserialize)]
233#[serde(rename_all = "camelCase")]
234pub struct Collateral {
235    /// Currency
236    pub currency: String,
237    /// Hourly borrow rate
238    #[serde(default)]
239    pub hourly_borrow_rate: String,
240    /// Max borrow amount
241    #[serde(default)]
242    pub max_borrowing_amount: String,
243    /// Free borrow amount
244    #[serde(default)]
245    pub free_borrowing_amount: String,
246    /// Free borrow limit
247    #[serde(default)]
248    pub free_borrow_limit: String,
249    /// Borrow usable switch
250    #[serde(default)]
251    pub borrow_usable_switch: bool,
252    /// Collateral switch
253    #[serde(default)]
254    pub collateral_switch: bool,
255    /// Collateral ratio
256    #[serde(default)]
257    pub collateral_ratio: String,
258}
259
260/// Borrow history response.
261#[derive(Debug, Clone, Serialize, Deserialize)]
262#[serde(rename_all = "camelCase")]
263pub struct BorrowHistory {
264    /// List of borrow records
265    pub list: Vec<BorrowRecord>,
266    /// Next page cursor
267    #[serde(default)]
268    pub next_page_cursor: String,
269}
270
271/// Borrow record.
272#[derive(Debug, Clone, Serialize, Deserialize)]
273#[serde(rename_all = "camelCase")]
274pub struct BorrowRecord {
275    /// Currency
276    pub currency: String,
277    /// Created time
278    pub created_time: String,
279    /// Borrow cost
280    #[serde(default)]
281    pub borrow_cost: String,
282    /// Hourly borrow rate
283    #[serde(default)]
284    pub hourly_borrow_rate: String,
285    /// Interest bearing borrow size
286    #[serde(default)]
287    pub interest_bearing_borrow_size: String,
288    /// Cost exemption
289    #[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    // FIXME(typed-field): falls back to `serde_json::Value` because the Bybit
488    // spec did not provide a matching inner type at generation time. Replace
489    // with a typed struct in a follow-up PR after consulting the V5 docs.
490    #[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}