binance_client/http_api_v3/data/
interval.rs1use std::convert::TryFrom;
6use std::fmt;
7
8use serde::Deserialize;
9use serde::Serialize;
10
11#[derive(Debug, Deserialize, Serialize, Clone, Copy, PartialEq, Eq, Hash)]
15pub enum Interval {
16 #[serde(rename = "1m")]
18 Minute1,
19 #[serde(rename = "3m")]
21 Minute3,
22 #[serde(rename = "5m")]
24 Minute5,
25 #[serde(rename = "15m")]
27 Minute15,
28 #[serde(rename = "30m")]
30 Minute30,
31 #[serde(rename = "1H")]
33 Hour1,
34 #[serde(rename = "2H")]
36 Hour2,
37 #[serde(rename = "4H")]
39 Hour4,
40 #[serde(rename = "6H")]
42 Hour6,
43 #[serde(rename = "8H")]
45 Hour8,
46 #[serde(rename = "12H")]
48 Hour12,
49 #[serde(rename = "1D")]
51 Day1,
52 #[serde(rename = "3D")]
54 Day3,
55 #[serde(rename = "1W")]
57 Week1,
58 #[serde(rename = "1M")]
60 Month1,
61}
62
63impl From<Interval> for i64 {
64 fn from(value: Interval) -> i64 {
65 match value {
66 Interval::Minute1 => 60,
67 Interval::Minute3 => 180,
68 Interval::Minute5 => 300,
69 Interval::Minute15 => 900,
70 Interval::Minute30 => 1800,
71 Interval::Hour1 => 3600,
72 Interval::Hour2 => 7200,
73 Interval::Hour4 => 14400,
74 Interval::Hour6 => 21600,
75 Interval::Hour8 => 28800,
76 Interval::Hour12 => 43200,
77 Interval::Day1 => 86400,
78 Interval::Day3 => 259200,
79 Interval::Week1 => 604800,
80 Interval::Month1 => 2592000,
81 }
82 }
83}
84
85impl TryFrom<i64> for Interval {
86 type Error = i64;
87
88 fn try_from(value: i64) -> Result<Self, Self::Error> {
89 Ok(match value {
90 60 => Self::Minute1,
91 180 => Self::Minute3,
92 300 => Self::Minute5,
93 900 => Self::Minute15,
94 1800 => Self::Minute30,
95 3600 => Self::Hour1,
96 7200 => Self::Hour2,
97 14400 => Self::Hour4,
98 21600 => Self::Hour6,
99 28800 => Self::Hour8,
100 43200 => Self::Hour12,
101 86400 => Self::Day1,
102 259200 => Self::Day3,
103 604800 => Self::Week1,
104 2592000 => Self::Month1,
105 value => return Err(value),
106 })
107 }
108}
109
110impl fmt::Display for Interval {
111 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
112 write!(
113 f,
114 "{}",
115 match self {
116 Interval::Minute1 => "1m",
117 Interval::Minute3 => "3m",
118 Interval::Minute5 => "5m",
119 Interval::Minute15 => "15m",
120 Interval::Minute30 => "30m",
121 Interval::Hour1 => "1h",
122 Interval::Hour2 => "2h",
123 Interval::Hour4 => "4h",
124 Interval::Hour6 => "6h",
125 Interval::Hour8 => "8h",
126 Interval::Hour12 => "12h",
127 Interval::Day1 => "1d",
128 Interval::Day3 => "3d",
129 Interval::Week1 => "1w",
130 Interval::Month1 => "1M",
131 }
132 )
133 }
134}