midgard_rs/types/
interval.rs

1use std::fmt::Display;
2
3use serde::{Deserialize, Serialize};
4
5/*
6
7*** Interval Options ***
85min
9hour
10day
11week
12month
13quarter
14year
15
16*/
17
18#[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}