binance_client/http_api_v3/data/
interval.rs

1//!
2//! The interval.
3//!
4
5use std::convert::TryFrom;
6use std::fmt;
7
8use serde::Deserialize;
9use serde::Serialize;
10
11///
12/// The chart timeframe interval.
13///
14#[derive(Debug, Deserialize, Serialize, Clone, Copy, PartialEq, Eq, Hash)]
15pub enum Interval {
16    /// The 1 minute interval.
17    #[serde(rename = "1m")]
18    Minute1,
19    /// The 3 minutes interval.
20    #[serde(rename = "3m")]
21    Minute3,
22    /// The 5 minutes interval.
23    #[serde(rename = "5m")]
24    Minute5,
25    /// The 15 minutes interval.
26    #[serde(rename = "15m")]
27    Minute15,
28    /// The 30 minutes interval.
29    #[serde(rename = "30m")]
30    Minute30,
31    /// The 1 hour interval.
32    #[serde(rename = "1H")]
33    Hour1,
34    /// The 2 hours interval.
35    #[serde(rename = "2H")]
36    Hour2,
37    /// The 4 hours interval.
38    #[serde(rename = "4H")]
39    Hour4,
40    /// The 6 hours interval.
41    #[serde(rename = "6H")]
42    Hour6,
43    /// The 8 hours interval.
44    #[serde(rename = "8H")]
45    Hour8,
46    /// The 12 hours interval.
47    #[serde(rename = "12H")]
48    Hour12,
49    /// The 1 day interval.
50    #[serde(rename = "1D")]
51    Day1,
52    /// The 3 days interval.
53    #[serde(rename = "3D")]
54    Day3,
55    /// The 1 week interval.
56    #[serde(rename = "1W")]
57    Week1,
58    /// The 1 month interval.
59    #[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}