grib/codetables/
grib2.rs

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