bitbank_api/private/
deposit_history.rs

1use 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    /// Exists only for crytos.
20    pub txid: Option<String>,
21    #[serde_as(as = "DisplayFromStr")]
22    pub status: Status,
23    #[serde_as(as = "TimestampMilliSeconds")]
24    pub found_at: NaiveDateTime,
25    /// Exists only for confirmed ones.
26    #[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}