use super::nmea_parser::{NmeaFields, Parse};
#[allow(unused)]
#[derive(Clone, Copy, Debug, PartialEq)]
pub struct NmeaGsv {
pub satellites_in_view: u8,
}
impl Default for NmeaGsv {
fn default() -> Self {
Self::new()
}
}
impl NmeaGsv {
pub const fn new() -> Self {
Self { satellites_in_view: 0 }
}
}
impl NmeaGsv {
#[allow(unused)]
pub fn parse(record: &[u8]) -> Option<Self> {
let mut fields = NmeaFields::new(record);
let talker_id = fields.next()?;
if talker_id.len() != 5 || &talker_id[2..] != b"GSV" {
return None;
}
let mut ret = Self::default();
let message_count = Parse::int(fields.next()?)?;
if message_count == 0 || message_count > u32::from(u8::MAX) {
return None;
}
let message_number = Parse::int(fields.next()?)?;
if message_number == 0 || message_number > message_count {
return None;
}
let satellites_in_view = Parse::int(fields.next()?)?;
ret.satellites_in_view = u8::try_from(satellites_in_view).ok()?;
Some(ret)
}
}