Skip to main content

gnss_protos/gps/
frame_id.rs

1use crate::gps::GpsError;
2
3#[derive(Debug, Default, PartialEq, Copy, Clone)]
4pub enum GpsQzssFrameId {
5    #[default]
6    /// GPS / QZSS Ephemeris subframe #1
7    Ephemeris1,
8
9    /// GPS / QZSS Ephemeris subframe #2
10    Ephemeris2,
11
12    /// GPS / QZSS Ephemeris subframe #3
13    Ephemeris3,
14}
15
16impl GpsQzssFrameId {
17    /// [GpsQzssFrameId] decoding attempt
18    pub(crate) fn decode(mask: u8) -> Result<Self, GpsError> {
19        match mask {
20            1 => Ok(Self::Ephemeris1),
21            2 => Ok(Self::Ephemeris2),
22            3 => Ok(Self::Ephemeris3),
23            _ => Err(GpsError::UnknownFrameType),
24        }
25    }
26}
27
28#[cfg(test)]
29mod test {
30    use super::GpsQzssFrameId;
31
32    #[test]
33    fn frame_id_decoding() {
34        for (value, expected) in [
35            (1, GpsQzssFrameId::Ephemeris1),
36            (2, GpsQzssFrameId::Ephemeris2),
37            (3, GpsQzssFrameId::Ephemeris3),
38        ] {
39            let frame_id = GpsQzssFrameId::decode(value).unwrap();
40
41            assert_eq!(frame_id, expected);
42        }
43    }
44}