1use crate::common;
4
5#[derive(Debug, PartialEq, Clone, Default)]
7pub struct Satellite {
8 pub prn: u16,
10 pub elevation: u8,
12 pub azimuth: u16,
14 pub snr: Option<u8>,
16}
17
18impl Satellite {
19 pub(crate) fn parse<'a>(
20 fields: &mut core::str::Split<'a, char>,
21 ) -> Result<Option<Self>, &'static str> {
22 let prn = common::parse_u16(fields.next())?;
23 let elevation = common::parse_u8(fields.next())?;
24 let azimuth = common::parse_u16(fields.next())?;
25 let snr = common::parse_u8(fields.next())?;
26
27 if let (Some(prn), Some(elevation), Some(azimuth)) = (prn, elevation, azimuth) {
28 Ok(Some(Self {
29 prn,
30 elevation,
31 azimuth,
32 snr,
33 }))
34 } else {
35 Ok(None)
36 }
37 }
38}