Skip to main content

asterdex_sdk/futures/endpoints/
settings.rs

1// US-009: Trading settings endpoints
2
3use 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    /// Set leverage for a symbol.
10    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    /// Set margin type (ISOLATED or CROSSED) for a symbol.
23    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    // US-009 test 3: set_leverage with mock returns leverage == 20
41    #[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}