1use num_enum::{IntoPrimitive, TryFromPrimitive};
2
3#[derive(Debug, Eq, PartialEq, TryFromPrimitive, IntoPrimitive)]
4#[repr(u8)]
5pub enum Table1_2 {
6 Analysis = 0,
7 StartOfForecast,
8 VerifyingTimeOfForecast,
9 ObservationTime,
10 LocalTime,
11 SimulationStart,
12 Missing = 255,
13}
14
15#[derive(Debug, Eq, PartialEq, TryFromPrimitive, IntoPrimitive)]
16#[repr(u8)]
17pub enum Table4_4 {
18 Minute = 0,
19 Hour,
20 Day,
21 Month,
22 Year,
23 Decade,
24 Normal,
25 Century,
26 ThreeHours = 10,
27 SixHours,
28 TwelveHours,
29 Second,
30 Missing = 255,
31}
32
33impl Table4_4 {
34 pub fn short_expr(&self) -> Option<&'static str> {
35 match self {
36 Self::Minute => Some("m"),
37 Self::Hour => Some("h"),
38 Self::Day => Some("D"),
39 Self::Month => Some("M"),
40 Self::Year => Some("Y"),
41 Self::Decade => Some("10Y"),
42 Self::Normal => Some("30Y"),
43 Self::Century => Some("C"),
44 Self::ThreeHours => Some("3h"),
45 Self::SixHours => Some("6h"),
46 Self::TwelveHours => Some("12h"),
47 Self::Second => Some("s"),
48 Self::Missing => None,
49 }
50 }
51}
52
53#[derive(Debug, Clone, Eq, PartialEq, TryFromPrimitive, IntoPrimitive)]
54#[repr(u8)]
55pub enum Table5_6 {
56 FirstOrderSpatialDifferencing = 1,
57 SecondOrderSpatialDifferencing,
58 Missing = 255,
59}
60
61#[cfg(test)]
62mod tests {
63 use num_enum::TryFromPrimitiveError;
64
65 use super::*;
66 use crate::codetables::*;
67
68 #[test]
69 fn num_enum_conversion() {
70 assert_eq!((Table4_4::try_from(1u8)), Ok(Table4_4::Hour));
71 assert_eq!((Table4_4::try_from(10u8)), Ok(Table4_4::ThreeHours));
72 assert_eq!(
73 (Table4_4::try_from(254u8)),
74 Err(TryFromPrimitiveError { number: 254 })
75 );
76 }
77
78 #[test]
79 fn num_lookup_result_conversion() {
80 assert_eq!(Code::from(Table4_4::try_from(1u8)), Name(Table4_4::Hour));
81 assert_eq!(Code::from(Table4_4::try_from(254u8)), Num(254));
82 }
83}