Skip to main content

ccxt_exchanges/bitget/rest/futures/
margin.rs

1//! Margin mode operations for Bitget futures/swap.
2
3use super::super::super::signed_request::HttpMethod;
4use super::super::super::{Bitget, symbol::BitgetSymbolConverter};
5use ccxt_core::{Error, Result};
6
7impl Bitget {
8    /// Set margin mode (cross or isolated) for a symbol.
9    ///
10    /// Uses Bitget POST `/api/v2/mix/account/set-margin-mode` endpoint.
11    pub async fn set_margin_mode_impl(&self, symbol: &str, mode: &str) -> Result<()> {
12        let exchange_id = BitgetSymbolConverter::unified_to_exchange(symbol);
13        let product_type = BitgetSymbolConverter::product_type_from_symbol(symbol);
14        let margin_coin = Self::margin_coin_from_symbol(symbol);
15
16        let margin_mode = match mode.to_lowercase().as_str() {
17            "isolated" => "isolated",
18            "cross" | "crossed" => "crossed",
19            _ => {
20                return Err(Error::invalid_request(format!(
21                    "Invalid margin mode: {}. Must be 'isolated' or 'cross'",
22                    mode
23                )));
24            }
25        };
26
27        self.signed_request("/api/v2/mix/account/set-margin-mode")
28            .method(HttpMethod::Post)
29            .param("symbol", &exchange_id)
30            .param("productType", product_type)
31            .param("marginCoin", margin_coin)
32            .param("marginMode", margin_mode)
33            .execute()
34            .await?;
35
36        Ok(())
37    }
38}