bybit_api/models/
spot_margin.rs1use serde::{Deserialize, Serialize};
2
3use crate::models::crypto_loan::CollateralRatioTier;
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
6#[serde(rename_all = "camelCase")]
7pub struct GetHistoricalInterestRateResponse {
8 #[serde(skip_serializing_if = "Option::is_none")]
9 pub list: Option<Vec<InterestRateRecord>>,
10}
11
12#[derive(Debug, Clone, Serialize, Deserialize)]
13#[serde(rename_all = "camelCase")]
14pub struct InterestRateRecord {
15 #[serde(skip_serializing_if = "Option::is_none")]
16 pub timestamp: Option<i64>,
17 #[serde(skip_serializing_if = "Option::is_none")]
18 pub currency: Option<String>,
19 #[serde(skip_serializing_if = "Option::is_none")]
20 pub hourly_borrow_rate: Option<String>,
21 #[serde(skip_serializing_if = "Option::is_none")]
22 pub vip_level: Option<String>,
23}
24
25#[derive(Debug, Clone, Serialize, Deserialize)]
26#[serde(rename_all = "camelCase")]
27pub struct GetPositionTiersResponse {
28 #[serde(skip_serializing_if = "Option::is_none")]
29 pub list: Option<Vec<PositionTierItem>>,
30}
31
32#[derive(Debug, Clone, Serialize, Deserialize)]
33#[serde(rename_all = "camelCase")]
34pub struct PositionTierItem {
35 #[serde(skip_serializing_if = "Option::is_none")]
36 pub currency: Option<String>,
37 #[serde(skip_serializing_if = "Option::is_none")]
38 pub position_tiers_ratio_list: Option<Vec<PositionTierRatio>>,
39}
40
41#[derive(Debug, Clone, Serialize, Deserialize)]
42#[serde(rename_all = "camelCase")]
43pub struct PositionTierRatio {
44 #[serde(skip_serializing_if = "Option::is_none")]
45 pub tier: Option<String>,
46 #[serde(skip_serializing_if = "Option::is_none")]
47 pub borrow_limit: Option<String>,
48 #[serde(rename = "positionMMR", skip_serializing_if = "Option::is_none")]
49 pub position_mmr: Option<String>,
50 #[serde(rename = "positionIMR", skip_serializing_if = "Option::is_none")]
51 pub position_imr: Option<String>,
52 #[serde(skip_serializing_if = "Option::is_none")]
53 pub max_leverage: Option<String>,
54}
55
56#[derive(Debug, Clone, Serialize, Deserialize)]
57#[serde(rename_all = "camelCase")]
58pub struct GetTieredCollateralRatioResponse {
59 #[serde(skip_serializing_if = "Option::is_none")]
60 pub list: Option<Vec<CollateralTierItem>>,
61}
62
63#[derive(Debug, Clone, Serialize, Deserialize)]
64#[serde(rename_all = "camelCase")]
65pub struct CollateralTierItem {
66 #[serde(skip_serializing_if = "Option::is_none")]
67 pub currency: Option<String>,
68 #[serde(skip_serializing_if = "Option::is_none")]
69 pub collateral_ratio_list: Option<Vec<CollateralRatioTier>>,
70}
71
72#[derive(Debug, Clone, Serialize, Deserialize)]
73#[serde(rename_all = "camelCase")]
74pub struct GetVipMarginDataResponse {
75 #[serde(skip_serializing_if = "Option::is_none")]
76 pub vip_coin_list: Option<Vec<VipCoinGroup>>,
77}
78
79#[derive(Debug, Clone, Serialize, Deserialize)]
80#[serde(rename_all = "camelCase")]
81pub struct VipCoinGroup {
82 #[serde(skip_serializing_if = "Option::is_none")]
83 pub vip_level: Option<String>,
84 #[serde(skip_serializing_if = "Option::is_none")]
85 pub list: Option<Vec<VipCoinDetail>>,
86}
87
88#[derive(Debug, Clone, Serialize, Deserialize)]
89#[serde(rename_all = "camelCase")]
90pub struct VipCoinDetail {
91 #[serde(skip_serializing_if = "Option::is_none")]
92 pub borrowable: Option<bool>,
93 #[serde(skip_serializing_if = "Option::is_none")]
94 pub collateral_ratio: Option<String>,
95 #[serde(skip_serializing_if = "Option::is_none")]
96 pub currency: Option<String>,
97 #[serde(skip_serializing_if = "Option::is_none")]
98 pub hourly_borrow_rate: Option<String>,
99 #[serde(skip_serializing_if = "Option::is_none")]
100 pub liquidation_order: Option<String>,
101 #[serde(skip_serializing_if = "Option::is_none")]
102 pub margin_collateral: Option<bool>,
103 #[serde(skip_serializing_if = "Option::is_none")]
104 pub max_borrowing_amount: Option<String>,
105}