grib/codetables/
grib2.rs

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}