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