bitbank_api/private/
assets.rs1use super::*;
2
3#[derive(TypedBuilder)]
4pub struct Params {}
5
6#[serde_as]
7#[derive(strum::EnumString, Deserialize, Debug)]
8#[serde(untagged)]
9pub enum WithdrawalFee {
10 Crypto(#[serde_as(as = "DisplayFromStr")] f64),
11 Fiat {
12 #[serde_as(as = "DisplayFromStr")]
13 under: f64,
14 #[serde_as(as = "DisplayFromStr")]
15 over: f64,
16 #[serde_as(as = "DisplayFromStr")]
17 threshold: f64,
18 },
19}
20
21#[serde_as]
22#[derive(Deserialize, Debug)]
23pub struct AssetInfo {
24 #[serde_as(as = "DisplayFromStr")]
25 pub asset: Asset,
26 #[serde_as(as = "DisplayFromStr")]
27 pub free_amount: f64,
28 pub amount_precision: u8,
29 #[serde_as(as = "DisplayFromStr")]
30 pub onhand_amount: f64,
31 #[serde_as(as = "DisplayFromStr")]
32 pub locked_amount: f64,
33 pub withdrawal_fee: WithdrawalFee,
34 pub stop_deposit: bool,
35 pub stop_withdrawal: bool,
36}
37
38#[derive(Deserialize)]
39struct Response {
40 assets: Vec<AssetInfo>,
41}
42
43pub async fn get(cred: Credential, _: Params) -> anyhow::Result<Vec<AssetInfo>> {
44 let resp: Response = ApiExec { cred }
45 .get("/v1/user/assets", "".to_owned())
46 .await?;
47 Ok(resp.assets)
48}
49
50#[cfg(test)]
51mod tests {
52 use super::*;
53
54 #[test]
55 fn test_withdrawal_deser() -> anyhow::Result<()> {
56 let s = r#"
57 "100.0"
58 "#;
59 let x: WithdrawalFee = serde_json::from_str(&s)?;
60 dbg!(&x);
61
62 let s = r#"
63 {
64 "under": "1.0",
65 "over": "2.0",
66 "threshold": "3.0"
67 }
68 "#;
69 let x: WithdrawalFee = serde_json::from_str(&s)?;
70 dbg!(&x);
71
72 Ok(())
73 }
74}