nautilus_architect_ax/http/
query.rs1use serde::{Deserialize, Serialize};
26
27use crate::common::enums::AxCandleWidth;
28
29#[derive(Clone, Debug, Deserialize, Serialize)]
34pub struct GetTickerParams {
35 pub symbol: String,
37}
38
39impl GetTickerParams {
40 #[must_use]
42 pub fn new(symbol: impl Into<String>) -> Self {
43 Self {
44 symbol: symbol.into(),
45 }
46 }
47}
48
49#[derive(Clone, Debug, Deserialize, Serialize)]
54pub struct GetInstrumentParams {
55 pub symbol: String,
57}
58
59impl GetInstrumentParams {
60 #[must_use]
62 pub fn new(symbol: impl Into<String>) -> Self {
63 Self {
64 symbol: symbol.into(),
65 }
66 }
67}
68
69#[derive(Clone, Debug, Deserialize, Serialize)]
74pub struct GetCandlesParams {
75 pub symbol: String,
77 pub start_timestamp_ns: i64,
79 pub end_timestamp_ns: i64,
81 pub candle_width: AxCandleWidth,
83}
84
85impl GetCandlesParams {
86 #[must_use]
88 pub fn new(
89 symbol: impl Into<String>,
90 start_timestamp_ns: i64,
91 end_timestamp_ns: i64,
92 candle_width: AxCandleWidth,
93 ) -> Self {
94 Self {
95 symbol: symbol.into(),
96 start_timestamp_ns,
97 end_timestamp_ns,
98 candle_width,
99 }
100 }
101}
102
103#[derive(Clone, Debug, Deserialize, Serialize)]
109pub struct GetCandleParams {
110 pub symbol: String,
112 pub candle_width: AxCandleWidth,
114}
115
116impl GetCandleParams {
117 #[must_use]
119 pub fn new(symbol: impl Into<String>, candle_width: AxCandleWidth) -> Self {
120 Self {
121 symbol: symbol.into(),
122 candle_width,
123 }
124 }
125}
126
127#[derive(Clone, Debug, Deserialize, Serialize)]
132pub struct GetFundingRatesParams {
133 pub symbol: String,
135 pub start_timestamp_ns: i64,
137 pub end_timestamp_ns: i64,
139}
140
141impl GetFundingRatesParams {
142 #[must_use]
144 pub fn new(symbol: impl Into<String>, start_timestamp_ns: i64, end_timestamp_ns: i64) -> Self {
145 Self {
146 symbol: symbol.into(),
147 start_timestamp_ns,
148 end_timestamp_ns,
149 }
150 }
151}
152
153#[derive(Clone, Debug, Deserialize, Serialize)]
158pub struct GetTransactionsParams {
159 pub transaction_types: Vec<String>,
161}
162
163impl GetTransactionsParams {
164 #[must_use]
166 pub fn new(transaction_types: Vec<String>) -> Self {
167 Self { transaction_types }
168 }
169}
170
171#[cfg(test)]
172mod tests {
173 use rstest::rstest;
174
175 use super::*;
176
177 #[rstest]
178 fn test_get_ticker_params_serialization() {
179 let params = GetTickerParams::new("GBPUSD-PERP");
180 let qs = serde_urlencoded::to_string(¶ms).unwrap();
181 assert_eq!(qs, "symbol=GBPUSD-PERP");
182 }
183
184 #[rstest]
185 fn test_get_instrument_params_serialization() {
186 let params = GetInstrumentParams::new("EURUSD-PERP");
187 let qs = serde_urlencoded::to_string(¶ms).unwrap();
188 assert_eq!(qs, "symbol=EURUSD-PERP");
189 }
190
191 #[rstest]
192 fn test_get_candles_params_serialization() {
193 let params = GetCandlesParams::new(
194 "GBPUSD-PERP",
195 1000000000,
196 2000000000,
197 AxCandleWidth::Minutes1,
198 );
199 let qs = serde_urlencoded::to_string(¶ms).unwrap();
200 assert!(qs.contains("symbol=GBPUSD-PERP"));
201 assert!(qs.contains("start_timestamp_ns=1000000000"));
202 assert!(qs.contains("end_timestamp_ns=2000000000"));
203 assert!(qs.contains("candle_width=1m"));
204 }
205
206 #[rstest]
207 fn test_get_candle_params_serialization() {
208 let params = GetCandleParams::new("GBPUSD-PERP", AxCandleWidth::Hours1);
209 let qs = serde_urlencoded::to_string(¶ms).unwrap();
210 assert!(qs.contains("symbol=GBPUSD-PERP"));
211 assert!(qs.contains("candle_width=1h"));
212 }
213
214 #[rstest]
215 fn test_get_funding_rates_params_serialization() {
216 let params = GetFundingRatesParams::new("GBPUSD-PERP", 1000000000, 2000000000);
217 let qs = serde_urlencoded::to_string(¶ms).unwrap();
218 assert!(qs.contains("symbol=GBPUSD-PERP"));
219 assert!(qs.contains("start_timestamp_ns=1000000000"));
220 assert!(qs.contains("end_timestamp_ns=2000000000"));
221 }
222}