rusftx/rest/requests/
get_fills.rs

1use crate::rest::model::fill::Fill;
2use crate::rest::request::{AuthenticatedRequest, Request};
3use crate::rest::requests::QueryOrder;
4use chrono::serde::ts_seconds_option;
5use chrono::{DateTime, Utc};
6use http::Method;
7use std::borrow::Cow;
8
9#[derive(Debug, builder_pattern::Builder)]
10pub struct GetFillsRequest {
11    #[default(None)]
12    pub market: Option<String>,
13    #[default(None)]
14    pub order: Option<QueryOrder>,
15    #[default(None)]
16    pub order_id: Option<u64>,
17    #[default(None)]
18    pub start_time: Option<DateTime<Utc>>,
19    #[default(None)]
20    pub end_time: Option<DateTime<Utc>>,
21}
22
23#[derive(Debug, serde::Serialize)]
24pub struct GetFillsRequestQuery {
25    pub market: Option<String>,
26    pub order: Option<QueryOrder>,
27    #[serde(rename = "orderId")]
28    pub order_id: Option<u64>,
29    #[serde(with = "ts_seconds_option")]
30    pub start_time: Option<DateTime<Utc>>,
31    #[serde(with = "ts_seconds_option")]
32    pub end_time: Option<DateTime<Utc>>,
33}
34
35impl Request for GetFillsRequest {
36    type Response = Vec<Fill>;
37    type Query = GetFillsRequestQuery;
38    type Body = ();
39
40    fn path(&self) -> Cow<str> {
41        "fills".into()
42    }
43
44    fn method(&self) -> Method {
45        Method::GET
46    }
47
48    fn query(&self) -> Option<Self::Query> {
49        Some(GetFillsRequestQuery {
50            market: self.market.clone(),
51            order: self.order,
52            order_id: self.order_id,
53            start_time: self.start_time,
54            end_time: self.end_time,
55        })
56    }
57}
58
59impl AuthenticatedRequest for GetFillsRequest {}
60
61#[cfg(test)]
62mod tests {
63    use crate::rest::requests::get_fills::GetFillsRequest;
64    use crate::rest::requests::test_utils;
65
66    #[tokio::test]
67    async fn get_fills() {
68        let rest_api = test_utils::get_rest_api_with_authentication_from_env();
69        let request = GetFillsRequest::new().build();
70        let result = rest_api.send(request).await;
71        dbg!(&result);
72        assert!(result.is_ok());
73    }
74}