bybit_rust_api/rest/spot_leverage_token/
spot_leverage_token_client.rs1use crate::rest::client::{RestClient, SecType, ServerResponse};
2use anyhow::Result;
3use serde_json::json;
4
5pub struct SpotLeverageTokenClient {
6 client: RestClient,
7}
8
9impl SpotLeverageTokenClient {
10 pub fn new(client: RestClient) -> Self {
11 SpotLeverageTokenClient { client }
12 }
13
14 pub async fn get_leverage_token_info(
17 &self,
18 lt_coin: Option<&str>,
19 ) -> Result<ServerResponse<serde_json::Value>> {
20 let endpoint = "v5/spot-lever-token/info";
21 let mut params = json!({});
22
23 if let Some(lt_coin) = lt_coin {
24 params["ltCoin"] = json!(lt_coin);
25 }
26
27 let response = self.client.get(endpoint, params, SecType::None).await?;
28 Ok(response)
29 }
30
31 pub async fn get_leverage_token_reference(
34 &self,
35 lt_coin: &str,
36 ) -> Result<ServerResponse<serde_json::Value>> {
37 let endpoint = "v5/spot-lever-token/reference";
38 let params = json!({
39 "ltCoin": lt_coin,
40 });
41
42 let response = self.client.get(endpoint, params, SecType::None).await?;
43 Ok(response)
44 }
45
46 pub async fn purchase(
49 &self,
50 lt_coin: &str,
51 lt_amount: &str,
52 serial_no: Option<&str>,
53 ) -> Result<ServerResponse<serde_json::Value>> {
54 let endpoint = "v5/spot-lever-token/purchase";
55 let mut body = json!({
56 "ltCoin": lt_coin,
57 "ltAmount": lt_amount,
58 });
59
60 if let Some(serial_no) = serial_no {
61 body["serialNo"] = json!(serial_no);
62 }
63
64 let response = self.client.post(endpoint, body, SecType::Signed).await?;
65 Ok(response)
66 }
67
68 pub async fn redeem(
71 &self,
72 lt_coin: &str,
73 lt_amount: &str,
74 serial_no: Option<&str>,
75 ) -> Result<ServerResponse<serde_json::Value>> {
76 let endpoint = "v5/spot-lever-token/redeem";
77 let mut body = json!({
78 "ltCoin": lt_coin,
79 "ltAmount": lt_amount,
80 });
81
82 if let Some(serial_no) = serial_no {
83 body["serialNo"] = json!(serial_no);
84 }
85
86 let response = self.client.post(endpoint, body, SecType::Signed).await?;
87 Ok(response)
88 }
89
90 pub async fn get_order_record(
93 &self,
94 lt_coin: Option<&str>,
95 order_id: Option<&str>,
96 start_time: Option<i64>,
97 end_time: Option<i64>,
98 limit: Option<i32>,
99 lt_order_type: Option<i32>, serial_no: Option<&str>,
101 ) -> Result<ServerResponse<serde_json::Value>> {
102 let endpoint = "v5/spot-lever-token/order-record";
103 let mut params = json!({});
104
105 if let Some(lt_coin) = lt_coin {
106 params["ltCoin"] = json!(lt_coin);
107 }
108 if let Some(order_id) = order_id {
109 params["orderId"] = json!(order_id);
110 }
111 if let Some(start_time) = start_time {
112 params["startTime"] = json!(start_time);
113 }
114 if let Some(end_time) = end_time {
115 params["endTime"] = json!(end_time);
116 }
117 if let Some(limit) = limit {
118 params["limit"] = json!(limit);
119 }
120 if let Some(lt_order_type) = lt_order_type {
121 params["ltOrderType"] = json!(lt_order_type);
122 }
123 if let Some(serial_no) = serial_no {
124 params["serialNo"] = json!(serial_no);
125 }
126
127 let response = self.client.get(endpoint, params, SecType::Signed).await?;
128 Ok(response)
129 }
130}
131
132#[cfg(test)]
133mod tests {
134 use super::*;
135 use crate::rest::ApiKeyPair;
136
137 fn create_test_client() -> SpotLeverageTokenClient {
138 let api_key_pair = ApiKeyPair::new(
139 "test_key".to_string(),
140 "test_secret".to_string(),
141 "".to_string(),
142 );
143 let rest_client =
144 RestClient::new(api_key_pair, "https://api-testnet.bybit.com".to_string());
145 SpotLeverageTokenClient::new(rest_client)
146 }
147
148 #[test]
149 fn test_client_creation() {
150 let client = create_test_client();
151 assert_eq!(
153 std::mem::size_of_val(&client),
154 std::mem::size_of::<SpotLeverageTokenClient>()
155 );
156 }
157
158 #[tokio::test]
159 async fn test_purchase_required_params() {
160 let client = create_test_client();
161 let result = client.purchase("BTC3LUSDT", "100.0", None).await;
162 assert!(result.is_err() || result.is_ok());
164 }
165
166 #[tokio::test]
167 async fn test_redeem_required_params() {
168 let client = create_test_client();
169 let result = client
170 .redeem("BTC3LUSDT", "50.0", Some("test_serial_123"))
171 .await;
172 assert!(result.is_err() || result.is_ok());
174 }
175
176 #[tokio::test]
177 async fn test_get_leverage_token_reference_required_params() {
178 let client = create_test_client();
179 let result = client.get_leverage_token_reference("BTC3LUSDT").await;
180 assert!(result.is_err() || result.is_ok());
182 }
183}