use super::*;
#[derive(Clone, Debug, PartialEq, Serialize)]
pub struct MssData {
pub source: NavigationSystem,
pub ss: Option<u8>,
pub snr: Option<u8>,
pub frequency: Option<f64>,
pub bit_rate: Option<u32>,
pub channel: Option<u32>,
}
pub(crate) fn handle(
sentence: &str,
nav_system: NavigationSystem,
) -> Result<ParsedMessage, ParseError> {
let split: Vec<&str> = sentence.split(',').collect();
Ok(ParsedMessage::Mss(MssData {
source: nav_system,
ss: pick_number_field(&split, 1)?,
snr: pick_number_field(&split, 2)?,
frequency: pick_number_field(&split, 3)?,
bit_rate: pick_number_field(&split, 4)?,
channel: pick_number_field(&split, 5)?,
}))
}
#[cfg(test)]
mod test {
use super::*;
#[test]
fn test_parse_cpmss() {
match NmeaParser::new().parse_sentence("$GPMSS,55,27,318.0,100,1*57") {
Ok(ps) => match ps {
ParsedMessage::Mss(mss) => {
assert_eq!(mss.source, NavigationSystem::Gps);
assert_eq!(mss.ss, Some(55));
assert_eq!(mss.snr, Some(27));
assert_eq!(mss.frequency, Some(318.0));
assert_eq!(mss.bit_rate, Some(100));
assert_eq!(mss.channel, Some(1));
}
ParsedMessage::Incomplete => {
assert!(false);
}
_ => {
assert!(false);
}
},
Err(e) => {
assert_eq!(e.to_string(), "OK");
}
}
}
}