bitbank_api/private/
deposit_history.rs1use super::*;
2
3#[derive(strum::EnumString, strum::Display, Debug)]
4#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
5pub enum Status {
6 Found,
7 Confirmed,
8 Done,
9}
10
11#[serde_as]
12#[derive(Deserialize, Debug)]
13pub struct Deposit {
14 pub uuid: String,
15 #[serde_as(as = "DisplayFromStr")]
16 pub asset: Asset,
17 #[serde_as(as = "DisplayFromStr")]
18 pub amount: f64,
19 pub txid: Option<String>,
21 #[serde_as(as = "DisplayFromStr")]
22 pub status: Status,
23 #[serde_as(as = "TimestampMilliSeconds")]
24 pub found_at: NaiveDateTime,
25 #[serde_as(as = "Option<TimestampMilliSeconds>")]
27 pub confirmed_at: Option<NaiveDateTime>,
28}
29
30#[derive(Deserialize)]
31struct Response {
32 deposits: Vec<Deposit>,
33}
34
35#[serde_as]
36#[derive(TypedBuilder, Serialize, Debug)]
37pub struct Params {
38 #[serde_as(as = "DisplayFromStr")]
39 asset: Asset,
40 #[builder(default, setter(strip_option))]
41 count: Option<u8>,
42 #[builder(default, setter(strip_option))]
43 #[serde_as(as = "Option<TimestampMilliSeconds>")]
44 since: Option<NaiveDateTime>,
45 #[builder(default, setter(strip_option))]
46 #[serde_as(as = "Option<TimestampMilliSeconds>")]
47 end: Option<NaiveDateTime>,
48}
49
50pub async fn get(cred: Credential, params: Params) -> anyhow::Result<Vec<Deposit>> {
51 let resp: Response = ApiExec { cred }
52 .get("/v1/user/deposit_history", to_query_params(params)?)
53 .await?;
54 Ok(resp.deposits)
55}
56
57#[cfg(test)]
58mod tests {
59 use super::*;
60
61 #[test]
62 fn test_params() -> anyhow::Result<()> {
63 let params = Params::builder()
64 .asset(XRP)
65 .since(NaiveDateTime::from_timestamp_opt(10, 0).unwrap())
66 .count(100)
67 .build();
68 assert_eq!(to_query_params(params)?, "asset=xrp&count=100&since=10000");
69 Ok(())
70 }
71}