bpx_api_client/routes/
account.rs

1use crate::error::Result;
2use crate::BpxClient;
3use bpx_api_types::account::{
4    AccountMaxBorrow, AccountMaxWithdrawal, AccountSettings, ConvertDustPayload, UpdateAccountPayload,
5};
6
7#[doc(hidden)]
8pub const API_ACCOUNT: &str = "/api/v1/account";
9#[doc(hidden)]
10pub const API_ACCOUNT_MAX_BORROW: &str = "/api/v1/account/limits/borrow";
11#[doc(hidden)]
12pub const API_ACCOUNT_MAX_WITHDRAWAL: &str = "/api/v1/account/limits/withdrawal";
13#[doc(hidden)]
14pub const API_ACCOUNT_CONVERT_DUST: &str = "/api/v1/account/convertDust";
15
16impl BpxClient {
17    /// Fetches the account's settings.
18    pub async fn get_account(&self) -> Result<AccountSettings> {
19        let url = format!("{}{}", self.base_url, API_ACCOUNT);
20        let res = self.get(url).await?;
21        res.json().await.map_err(Into::into)
22    }
23
24    /// Fetches the account's maximum borrow amount for a given symbol.
25    pub async fn get_account_max_borrow(&self, symbol: &str) -> Result<AccountMaxBorrow> {
26        let url = format!("{}{}?symbol={}", self.base_url, API_ACCOUNT_MAX_BORROW, symbol);
27        let res = self.get(url).await?;
28        res.json().await.map_err(Into::into)
29    }
30
31    /// Fetches the account's maximum withdrawal amount for a given symbol.
32    pub async fn get_account_max_withdrawal(
33        &self,
34        symbol: &str,
35        auto_borrow: Option<bool>,
36        auto_lend_redeem: Option<bool>,
37    ) -> Result<AccountMaxWithdrawal> {
38        let mut url = format!("{}{}?symbol={}", self.base_url, API_ACCOUNT_MAX_WITHDRAWAL, symbol);
39        if let Some(auto_borrow) = auto_borrow {
40            url.push_str(&format!("&autoBorrow={auto_borrow}"));
41        }
42        if let Some(auto_lend_redeem) = auto_lend_redeem {
43            url.push_str(&format!("&autoLendRedeem={auto_lend_redeem}"));
44        }
45
46        let res = self.get(url).await?;
47        res.json().await.map_err(Into::into)
48    }
49
50    /// Updates the account's settings.
51    pub async fn update_account(&self, payload: UpdateAccountPayload) -> Result<()> {
52        let url = format!("{}{}", self.base_url, API_ACCOUNT);
53        self.patch(url, payload).await?;
54
55        Ok(())
56    }
57
58    /// Converts a dust balance to USDC. The balance (including lend) must be less
59    /// than the minimum quantity tradable on the spot order book.
60    pub async fn convert_dust_balance(&self, payload: ConvertDustPayload) -> Result<()> {
61        let url = format!("{}{}", self.base_url, API_ACCOUNT_CONVERT_DUST);
62        self.post(url, payload).await?;
63
64        Ok(())
65    }
66}