bybit_rust_api/rest/account/dto/
collateral.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Serialize, Deserialize)]
4pub struct CollateralInfoDetails {
5    pub currency: String,
6    pub equity: String,
7    pub free: String,
8    #[serde(rename = "collateralRatio")]
9    pub collateral_ratio: String,
10    #[serde(rename = "collateralSwitch")]
11    pub collateral_switch: bool,
12    #[serde(rename = "marginCollateral")]
13    pub margin_collateral: bool,
14    #[serde(rename = "availableToBorrow")]
15    pub available_to_borrow: String,
16    #[serde(rename = "borrowAmount")]
17    pub borrow_amount: String,
18    #[serde(rename = "maxBorrowingAmount")]
19    pub max_borrowing_amount: String,
20}
21
22#[derive(Debug, Clone, Serialize, Deserialize)]
23pub struct CollateralInfoResult {
24    pub list: Vec<CollateralInfoDetails>,
25}
26
27#[derive(Debug, Clone, Serialize, Deserialize)]
28pub struct BorrowHistoryDetails {
29    pub currency: String,
30    #[serde(rename = "borrowTime")]
31    pub borrow_time: String,
32    #[serde(rename = "borrowAmount")]
33    pub borrow_amount: String,
34    #[serde(rename = "borrowCost")]
35    pub borrow_cost: String,
36    #[serde(rename = "unpaidCost")]
37    pub unpaid_cost: String,
38    #[serde(rename = "unpaidInterest")]
39    pub unpaid_interest: String,
40    #[serde(rename = "interestRate")]
41    pub interest_rate: String,
42}
43
44#[derive(Debug, Clone, Serialize, Deserialize)]
45pub struct BorrowHistoryResult {
46    #[serde(rename = "nextPageCursor")]
47    pub next_page_cursor: String,
48    pub list: Vec<BorrowHistoryDetails>,
49}
50
51#[cfg(test)]
52mod tests {
53    use super::*;
54    use crate::rest::client::ServerResponse;
55    use serde_json::from_str;
56
57    #[test]
58    fn test_deserialize_collateral_info() {
59        let json_data = r#"
60        {
61            "retCode": 0,
62            "retMsg": "OK",
63            "result": {
64                "list": [
65                    {
66                        "currency": "BTC",
67                        "equity": "10.5",
68                        "free": "5.2",
69                        "collateralRatio": "0.9",
70                        "collateralSwitch": true,
71                        "marginCollateral": true,
72                        "availableToBorrow": "100",
73                        "borrowAmount": "0",
74                        "maxBorrowingAmount": "200"
75                    }
76                ]
77            },
78            "retExtInfo": {},
79            "time": 1690872862481
80        }
81        "#;
82        let response: ServerResponse<CollateralInfoResult> =
83            from_str(json_data).expect("Failed to deserialize CollateralInfoResult");
84        assert_eq!(response.ret_code, 0);
85        let result = response.result;
86        assert_eq!(result.list.len(), 1);
87        assert_eq!(result.list[0].currency, "BTC");
88        assert_eq!(result.list[0].collateral_switch, true);
89    }
90
91    #[test]
92    fn test_deserialize_borrow_history() {
93        let json_data = r#"
94        {
95            "retCode": 0,
96            "retMsg": "OK",
97            "result": {
98                "nextPageCursor": "cursor_borrow",
99                "list": [
100                    {
101                        "currency": "USDT",
102                        "borrowTime": "1690872862481",
103                        "borrowAmount": "100",
104                        "borrowCost": "0.01",
105                        "unpaidCost": "0",
106                        "unpaidInterest": "0",
107                        "interestRate": "0.0001"
108                    }
109                ]
110            },
111            "retExtInfo": {},
112            "time": 1690872862481
113        }
114        "#;
115        let response: ServerResponse<BorrowHistoryResult> =
116            from_str(json_data).expect("Failed to deserialize BorrowHistoryResult");
117        assert_eq!(response.ret_code, 0);
118        let result = response.result;
119        assert_eq!(result.list.len(), 1);
120        assert_eq!(result.list[0].currency, "USDT");
121        assert_eq!(result.list[0].borrow_amount, "100");
122    }
123}