bybit_rust_api/rest/account/dto/
collateral.rs1use 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}