ccxt_exchanges/bitget/rest/
account.rs

1//! Account operations for Bitget REST API.
2
3use super::super::{Bitget, parser};
4use ccxt_core::{
5    Error, ParseError, Result,
6    types::{Balance, Trade},
7};
8use tracing::warn;
9
10impl Bitget {
11    /// Fetch account balances.
12    pub async fn fetch_balance(&self) -> Result<Balance> {
13        let path = self.build_api_path("/account/assets");
14        let response = self.signed_request(&path).execute().await?;
15
16        let data = response
17            .get("data")
18            .ok_or_else(|| Error::from(ParseError::missing_field("data")))?;
19
20        parser::parse_balance(data)
21    }
22
23    /// Fetch user's trade history.
24    pub async fn fetch_my_trades(
25        &self,
26        symbol: &str,
27        since: Option<i64>,
28        limit: Option<u32>,
29    ) -> Result<Vec<Trade>> {
30        let market = self.base().market(symbol).await?;
31
32        let path = self.build_api_path("/trade/fills");
33
34        let actual_limit = limit.map_or(100, |l| l.min(500));
35
36        let mut builder = self
37            .signed_request(&path)
38            .param("symbol", &market.id)
39            .param("limit", actual_limit);
40
41        if let Some(start_time) = since {
42            builder = builder.param("startTime", start_time);
43        }
44
45        let response = builder.execute().await?;
46
47        let data = response
48            .get("data")
49            .ok_or_else(|| Error::from(ParseError::missing_field("data")))?;
50
51        let trades_array = data.as_array().ok_or_else(|| {
52            Error::from(ParseError::invalid_format(
53                "data",
54                "Expected array of trades",
55            ))
56        })?;
57
58        let mut trades = Vec::new();
59        for trade_data in trades_array {
60            match parser::parse_trade(trade_data, Some(&market)) {
61                Ok(trade) => trades.push(trade),
62                Err(e) => {
63                    warn!(error = %e, "Failed to parse my trade");
64                }
65            }
66        }
67
68        Ok(trades)
69    }
70}