asterdex_sdk/futures/endpoints/
settings.rs1use crate::futures::models::account::{SetLeverageResponse, StatusMsgResponse};
4use crate::rest::client::RestClient;
5use crate::rest::error::AsterDexError;
6use crate::rest::response::ApiResponse;
7
8impl RestClient {
9 pub async fn set_leverage(
11 &self,
12 symbol: &str,
13 leverage: u32,
14 ) -> Result<ApiResponse<SetLeverageResponse>, AsterDexError> {
15 let lev_str = leverage.to_string();
16 self.signed_post("/fapi/v3/leverage", &[
17 ("symbol", symbol),
18 ("leverage", &lev_str),
19 ]).await
20 }
21
22 pub async fn set_margin_type(
24 &self,
25 symbol: &str,
26 margin_type: &str,
27 ) -> Result<ApiResponse<StatusMsgResponse>, AsterDexError> {
28 self.signed_post("/fapi/v3/marginType", &[
29 ("symbol", symbol),
30 ("marginType", margin_type),
31 ]).await
32 }
33}
34
35#[cfg(test)]
36mod tests {
37 use super::*;
38 use crate::auth::Credentials;
39
40 #[tokio::test]
42 async fn set_leverage_mock() {
43 let mut server = mockito::Server::new_async().await;
44 let _mock = server
45 .mock("POST", "/fapi/v3/leverage")
46 .match_query(mockito::Matcher::Any)
47 .with_status(200)
48 .with_header("content-type", "application/json")
49 .with_body(r#"{"leverage":20,"maxNotionalValue":"1000000","symbol":"BTCUSDT"}"#)
50 .create_async()
51 .await;
52
53 let creds = Credentials::new(
54 "0x0000000000000000000000000000000000000001",
55 "0x0000000000000000000000000000000000000002",
56 "0000000000000000000000000000000000000000000000000000000000000001",
57 714,
58 )
59 .unwrap();
60 let client = RestClient::new(&server.url(), creds).unwrap();
61 let resp = client.set_leverage("BTCUSDT", 20).await.unwrap();
62 assert_eq!(resp.data.leverage, 20);
63 }
64}