exc_binance/http/request/
candle.rs1use serde::Serialize;
2
3use super::{Rest, RestEndpoint, RestError};
4
5#[derive(Debug, Clone, Copy, Serialize)]
7pub enum Interval {
8 #[serde(rename = "1m")]
10 M1,
11 #[serde(rename = "3m")]
13 M3,
14 #[serde(rename = "5m")]
16 M5,
17 #[serde(rename = "15m")]
19 M15,
20 #[serde(rename = "30m")]
22 M30,
23 #[serde(rename = "1h")]
25 H1,
26 #[serde(rename = "2h")]
28 H2,
29 #[serde(rename = "4h")]
31 H4,
32 #[serde(rename = "6h")]
34 H6,
35 #[serde(rename = "8h")]
37 H8,
38 #[serde(rename = "12h")]
40 H12,
41 #[serde(rename = "1d")]
43 D1,
44 #[serde(rename = "3d")]
46 D3,
47 #[serde(rename = "1w")]
49 W1,
50 #[serde(rename = "1M")]
52 Mon1,
53}
54
55#[derive(Debug, Clone, Serialize)]
57#[serde(rename_all = "camelCase")]
58pub struct QueryCandles {
59 pub symbol: String,
61 pub interval: Interval,
63 #[serde(skip_serializing_if = "Option::is_none")]
65 pub start_time: Option<i64>,
66 #[serde(skip_serializing_if = "Option::is_none")]
68 pub end_time: Option<i64>,
69 #[serde(skip_serializing_if = "Option::is_none")]
71 pub limit: Option<usize>,
72}
73
74impl Rest for QueryCandles {
75 fn method(&self, _endpoint: &RestEndpoint) -> Result<http::Method, RestError> {
76 Ok(http::Method::GET)
77 }
78
79 fn to_path(&self, endpoint: &RestEndpoint) -> Result<String, RestError> {
80 let qs = serde_urlencoded::to_string(self)?;
81 match endpoint {
82 RestEndpoint::UsdMarginFutures => Ok(format!("/fapi/v1/klines?{qs}")),
83 RestEndpoint::Spot(_) => Ok(format!("/api/v3/klines?{qs}")),
84 RestEndpoint::EuropeanOptions => Ok(format!("/eapi/v1/klines?{qs}")),
85 }
86 }
87
88 fn to_payload(&self) -> super::Payload {
89 super::Payload::new(self.clone())
90 }
91}