midgard_rs/types/
interval.rs1use std::fmt::Display;
2
3use serde::{Deserialize, Serialize};
4
5#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
19pub enum Interval {
20 #[serde(rename = "5min")]
21 FiveMinutes,
22 #[serde(rename = "hour")]
23 Hour,
24 #[serde(rename = "day")]
25 Day,
26 #[serde(rename = "week")]
27 Week,
28 #[serde(rename = "month")]
29 Month,
30 #[serde(rename = "quarter")]
31 Quarter,
32 #[serde(rename = "year")]
33 Year,
34}
35
36impl Default for Interval {
37 fn default() -> Self {
38 Self::Day
39 }
40}
41
42impl Display for Interval {
43 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
44 match self {
45 Self::FiveMinutes => write!(f, "5min"),
46 Self::Hour => write!(f, "hour"),
47 Self::Day => write!(f, "day"),
48 Self::Week => write!(f, "week"),
49 Self::Month => write!(f, "month"),
50 Self::Quarter => write!(f, "quarter"),
51 Self::Year => write!(f, "year"),
52 }
53 }
54}
55
56impl From<&str> for Interval {
57 fn from(s: &str) -> Self {
58 match s {
59 "5min" => Self::FiveMinutes,
60 "hour" => Self::Hour,
61 "week" => Self::Week,
62 "month" => Self::Month,
63 "quarter" => Self::Quarter,
64 "year" => Self::Year,
65 _ => Self::Day,
66 }
67 }
68}
69
70#[cfg(test)]
71mod tests {
72 use super::*;
73
74 #[test]
75 fn test_interval_default() {
76 assert_eq!(Interval::default(), Interval::Day);
77 }
78
79 #[test]
80 fn test_interval_display() {
81 assert_eq!(Interval::FiveMinutes.to_string(), "5min");
82 assert_eq!(Interval::Hour.to_string(), "hour");
83 assert_eq!(Interval::Day.to_string(), "day");
84 assert_eq!(Interval::Week.to_string(), "week");
85 assert_eq!(Interval::Month.to_string(), "month");
86 assert_eq!(Interval::Quarter.to_string(), "quarter");
87 assert_eq!(Interval::Year.to_string(), "year");
88 }
89
90 #[test]
91 fn test_interval_from() {
92 assert_eq!(Interval::from("5min"), Interval::FiveMinutes);
93 assert_eq!(Interval::from("hour"), Interval::Hour);
94 assert_eq!(Interval::from("day"), Interval::Day);
95 assert_eq!(Interval::from("week"), Interval::Week);
96 assert_eq!(Interval::from("month"), Interval::Month);
97 assert_eq!(Interval::from("quarter"), Interval::Quarter);
98 assert_eq!(Interval::from("year"), Interval::Year);
99 assert_eq!(Interval::from("invalid"), Interval::Day);
100 }
101}