rusftx/rest/requests/
get_open_trigger_orders.rs

1use crate::rest::model::trigger_order::{TriggerOrder, TriggerOrderType};
2use crate::rest::request::{AuthenticatedRequest, Request};
3use std::borrow::Cow;
4
5#[derive(Debug, builder_pattern::Builder)]
6pub struct GetOpenTriggerOrdersRequest {
7    #[default(None)]
8    pub market: Option<String>,
9    #[default(None)]
10    pub r#type: Option<TriggerOrderType>,
11}
12
13#[derive(Debug, serde::Serialize)]
14pub struct GetOpenTriggerOrdersQuery {
15    pub market: Option<String>,
16    pub r#type: Option<TriggerOrderType>,
17}
18
19impl Request for GetOpenTriggerOrdersRequest {
20    type Response = Vec<TriggerOrder>;
21    type Query = GetOpenTriggerOrdersQuery;
22    type Body = ();
23
24    fn path(&self) -> Cow<str> {
25        "conditional_orders".into()
26    }
27
28    fn method(&self) -> http::Method {
29        http::Method::GET
30    }
31
32    fn query(&self) -> Option<Self::Query> {
33        Some(GetOpenTriggerOrdersQuery {
34            market: self.market.clone(),
35            r#type: self.r#type,
36        })
37    }
38}
39
40impl AuthenticatedRequest for GetOpenTriggerOrdersRequest {}
41
42#[cfg(test)]
43mod tests {
44    use crate::rest::model::trigger_order::TriggerOrderType;
45    use crate::rest::requests::get_open_trigger_orders::GetOpenTriggerOrdersRequest;
46    use crate::rest::requests::test_utils;
47
48    #[tokio::test]
49    async fn test_get_open_trigger_orders() {
50        let rest_api = test_utils::get_rest_api_with_authentication_from_env();
51        let request = GetOpenTriggerOrdersRequest::new().build();
52        let result = rest_api.send(request).await;
53        assert!(result.is_ok());
54    }
55
56    #[tokio::test]
57    async fn test_get_open_trigger_orders_with_market() {
58        let rest_api = test_utils::get_rest_api_with_authentication_from_env();
59        let request = GetOpenTriggerOrdersRequest::new()
60            .market(Some("BTC-PERP".into()))
61            .build();
62        let result = rest_api.send(request).await;
63        assert!(result.is_ok());
64    }
65
66    #[tokio::test]
67    async fn test_get_open_trigger_orders_with_type() {
68        let rest_api = test_utils::get_rest_api_with_authentication_from_env();
69        let request = GetOpenTriggerOrdersRequest::new()
70            .r#type(Some(TriggerOrderType::TakeProfit))
71            .build();
72        let result = rest_api.send(request).await;
73        assert!(result.is_ok());
74    }
75
76    #[tokio::test]
77    async fn test_get_open_trigger_orders_with_market_and_type() {
78        let rest_api = test_utils::get_rest_api_with_authentication_from_env();
79        let request = GetOpenTriggerOrdersRequest::new()
80            .market(Some("BTC-PERP".into()))
81            .r#type(Some(TriggerOrderType::TakeProfit))
82            .build();
83        let result = rest_api.send(request).await;
84        assert!(result.is_ok());
85    }
86
87    #[tokio::test]
88    async fn test_get_open_trigger_orders_with_market_and_type_stop() {
89        let rest_api = test_utils::get_rest_api_with_authentication_from_env();
90        let request = GetOpenTriggerOrdersRequest::new()
91            .market(Some("BTC-PERP".into()))
92            .r#type(Some(TriggerOrderType::Stop))
93            .build();
94        let result = rest_api.send(request).await;
95        assert!(result.is_ok());
96    }
97
98    #[tokio::test]
99    async fn test_get_open_trigger_orders_with_market_and_type_traling_stop_limit() {
100        let rest_api = test_utils::get_rest_api_with_authentication_from_env();
101        let request = GetOpenTriggerOrdersRequest::new()
102            .market(Some("BTC-PERP".into()))
103            .r#type(Some(TriggerOrderType::TrailingStop))
104            .build();
105        let result = rest_api.send(request).await;
106        assert!(result.is_ok());
107    }
108}