bo4e_core/enums/
time_unit.rs1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
11#[non_exhaustive]
12pub enum TimeUnit {
13 #[serde(rename = "SEKUNDE")]
15 Second,
16
17 #[serde(rename = "MINUTE")]
19 Minute,
20
21 #[serde(rename = "STUNDE")]
23 Hour,
24
25 #[serde(rename = "VIERTEL_STUNDE")]
27 QuarterHour,
28
29 #[serde(rename = "TAG")]
31 Day,
32
33 #[serde(rename = "WOCHE")]
35 Week,
36
37 #[serde(rename = "MONAT")]
39 Month,
40
41 #[serde(rename = "QUARTAL")]
43 Quarter,
44
45 #[serde(rename = "HALBJAHR")]
47 HalfYear,
48
49 #[serde(rename = "JAHR")]
51 Year,
52}
53
54impl TimeUnit {
55 pub fn german_name(&self) -> &'static str {
57 match self {
58 Self::Second => "Sekunde",
59 Self::Minute => "Minute",
60 Self::Hour => "Stunde",
61 Self::QuarterHour => "Viertelstunde",
62 Self::Day => "Tag",
63 Self::Week => "Woche",
64 Self::Month => "Monat",
65 Self::Quarter => "Quartal",
66 Self::HalfYear => "Halbjahr",
67 Self::Year => "Jahr",
68 }
69 }
70}
71
72#[cfg(test)]
73mod tests {
74 use super::*;
75
76 #[test]
77 fn test_serialize() {
78 assert_eq!(
79 serde_json::to_string(&TimeUnit::Hour).unwrap(),
80 r#""STUNDE""#
81 );
82 assert_eq!(serde_json::to_string(&TimeUnit::Year).unwrap(), r#""JAHR""#);
83 }
84
85 #[test]
86 fn test_roundtrip() {
87 for unit in [
88 TimeUnit::Second,
89 TimeUnit::Minute,
90 TimeUnit::Hour,
91 TimeUnit::QuarterHour,
92 TimeUnit::Day,
93 TimeUnit::Week,
94 TimeUnit::Month,
95 TimeUnit::Quarter,
96 TimeUnit::HalfYear,
97 TimeUnit::Year,
98 ] {
99 let json = serde_json::to_string(&unit).unwrap();
100 let parsed: TimeUnit = serde_json::from_str(&json).unwrap();
101 assert_eq!(unit, parsed);
102 }
103 }
104}