bpx_api_client/routes/
account.rs1use crate::BpxClient;
2use crate::error::{Error, Result};
3use bpx_api_types::account::{
4 AccountMaxBorrow, AccountMaxOrder, AccountMaxWithdrawal, AccountSettings, ConvertDustPayload,
5 MaxOrderQuery, UpdateAccountPayload,
6};
7
8#[doc(hidden)]
9pub const API_ACCOUNT: &str = "/api/v1/account";
10#[doc(hidden)]
11pub const API_ACCOUNT_MAX_BORROW: &str = "/api/v1/account/limits/borrow";
12#[doc(hidden)]
13pub const API_ACCOUNT_MAX_ORDER: &str = "/api/v1/account/limits/order";
14#[doc(hidden)]
15pub const API_ACCOUNT_MAX_WITHDRAWAL: &str = "/api/v1/account/limits/withdrawal";
16#[doc(hidden)]
17pub const API_ACCOUNT_CONVERT_DUST: &str = "/api/v1/account/convertDust";
18
19impl BpxClient {
20 pub async fn get_account(&self) -> Result<AccountSettings> {
22 let url = self.base_url.join(API_ACCOUNT)?;
23 let res = self.get(url).await?;
24 res.json().await.map_err(Into::into)
25 }
26
27 pub async fn get_account_max_borrow(&self, symbol: &str) -> Result<AccountMaxBorrow> {
29 let mut url = self.base_url.join(API_ACCOUNT_MAX_BORROW)?;
30 url.query_pairs_mut().append_pair("symbol", symbol);
31 let res = self.get(url).await?;
32 res.json().await.map_err(Into::into)
33 }
34
35 pub async fn get_account_max_order(&self, params: MaxOrderQuery) -> Result<AccountMaxOrder> {
37 let mut url = self.base_url.join(API_ACCOUNT_MAX_ORDER)?;
38 let query_string = serde_qs::to_string(¶ms)
39 .map_err(|e| Error::UrlParseError(e.to_string().into_boxed_str()))?;
40 url.set_query(Some(&query_string));
41 let res = self.get(url).await?;
42 res.json().await.map_err(Into::into)
43 }
44
45 pub async fn get_account_max_withdrawal(
47 &self,
48 symbol: &str,
49 auto_borrow: Option<bool>,
50 auto_lend_redeem: Option<bool>,
51 ) -> Result<AccountMaxWithdrawal> {
52 let mut url = self.base_url.join(API_ACCOUNT_MAX_WITHDRAWAL)?;
53 {
54 let mut query = url.query_pairs_mut();
55 query.append_pair("symbol", symbol);
56 if let Some(auto_borrow) = auto_borrow {
57 query.append_pair("autoBorrow", &auto_borrow.to_string());
58 }
59 if let Some(auto_lend_redeem) = auto_lend_redeem {
60 query.append_pair("autoLendRedeem", &auto_lend_redeem.to_string());
61 }
62 }
63 let res = self.get(url).await?;
64 res.json().await.map_err(Into::into)
65 }
66
67 pub async fn update_account(&self, payload: UpdateAccountPayload) -> Result<()> {
69 let url = self.base_url.join(API_ACCOUNT)?;
70 self.patch(url, payload).await?;
71
72 Ok(())
73 }
74
75 pub async fn convert_dust_balance(&self, payload: ConvertDustPayload) -> Result<()> {
78 let url = self.base_url.join(API_ACCOUNT_CONVERT_DUST)?;
79 self.post(url, payload).await?;
80
81 Ok(())
82 }
83}