rusftx/rest/requests/
get_open_trigger_orders.rs1use 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}