bpx_api_client/routes/
vault.rs1use crate::error::Result;
2
3use bpx_api_types::vault::{
4 Vault, VaultHistory, VaultHistoryParams, VaultMintRequest, VaultRedeem,
5 VaultRedeemCancelRequest, VaultRedeemRequest,
6};
7
8use crate::BpxClient;
9
10#[doc(hidden)]
11pub const API_VAULTS: &str = "/api/v1/vaults";
12#[doc(hidden)]
13pub const API_VAULT_MINT: &str = "/api/v1/vault/mint";
14#[doc(hidden)]
15pub const API_VAULT_REDEEM: &str = "/api/v1/vault/redeem";
16#[doc(hidden)]
17pub const API_VAULT_PENDING_REDEEMS: &str = "/api/v1/vault/redeems/pending";
18#[doc(hidden)]
19pub const API_VAULTS_HISTORY: &str = "/api/v1/vaults/history";
20
21impl BpxClient {
22 pub async fn get_vaults(&self) -> Result<Vec<Vault>> {
24 let url = self.base_url.join(API_VAULTS)?;
25 let res = self.get(url).await?;
26 res.json().await.map_err(Into::into)
27 }
28
29 pub async fn vault_mint(&self, request: VaultMintRequest) -> Result<()> {
31 let url = self.base_url.join(API_VAULT_MINT)?;
32 let res = self.post(url, request).await?;
33 let _ = res.bytes().await?;
34 Ok(())
35 }
36
37 pub async fn vault_redeem(&self, request: VaultRedeemRequest) -> Result<()> {
39 let url = self.base_url.join(API_VAULT_REDEEM)?;
40 let res = self.post(url, request).await?;
41 let _ = res.bytes().await?;
42 Ok(())
43 }
44
45 pub async fn vault_redeem_cancel(&self, request: VaultRedeemCancelRequest) -> Result<()> {
47 let url = self.base_url.join(API_VAULT_REDEEM)?;
48 let res = self.delete(url, request).await?;
49 let _ = res.bytes().await?;
50 Ok(())
51 }
52
53 pub async fn get_vault_pending_redeems(&self, vault_id: u32) -> Result<Vec<VaultRedeem>> {
55 let mut url = self.base_url.join(API_VAULT_PENDING_REDEEMS)?;
56 url.query_pairs_mut()
57 .append_pair("vaultId", &vault_id.to_string());
58 let res = self.get(url).await?;
59 res.json().await.map_err(Into::into)
60 }
61
62 pub async fn get_vault_history(&self, params: VaultHistoryParams) -> Result<Vec<VaultHistory>> {
64 let query_string = serde_qs::to_string(¶ms)
65 .map_err(|e| crate::error::Error::UrlParseError(e.to_string().into_boxed_str()))?;
66 let mut url = self.base_url.join(API_VAULTS_HISTORY)?;
67 url.set_query(Some(&query_string));
68 let res = self.get(url).await?;
69 res.json().await.map_err(Into::into)
70 }
71}