bitbank_api/private/
fetch_active_orders.rs

1use super::*;
2
3#[derive(Deserialize)]
4struct Response {
5    orders: Vec<OrderInfo>,
6}
7
8#[serde_as]
9#[derive(TypedBuilder, Serialize, Debug)]
10pub struct Params {
11    #[serde_as(as = "DisplayFromStr")]
12    pair: Pair,
13    #[builder(default, setter(strip_option))]
14    count: Option<u64>,
15    #[builder(default, setter(strip_option))]
16    from_id: Option<u64>,
17    #[builder(default, setter(strip_option))]
18    end_id: Option<u64>,
19    #[builder(default, setter(strip_option))]
20    #[serde_as(as = "Option<TimestampMilliSeconds>")]
21    since: Option<NaiveDateTime>,
22    #[builder(default, setter(strip_option))]
23    #[serde_as(as = "Option<TimestampMilliSeconds>")]
24    end: Option<NaiveDateTime>,
25}
26
27pub async fn get(cred: Credential, params: Params) -> anyhow::Result<Vec<OrderInfo>> {
28    let resp: Response = ApiExec { cred }
29        .get("/v1/user/spot/active_orders", to_query_params(params)?)
30        .await?;
31    Ok(resp.orders)
32}
33
34#[cfg(test)]
35mod tests {
36    use super::*;
37
38    #[test]
39    fn test_params() -> anyhow::Result<()> {
40        let params = Params::builder()
41            .pair(Pair(XRP, JPY))
42            .since(NaiveDateTime::from_timestamp_opt(10, 0).unwrap())
43            .count(100)
44            .build();
45        assert_eq!(
46            to_query_params(params)?,
47            "pair=xrp_jpy&count=100&since=10000"
48        );
49        Ok(())
50    }
51}