diff --git a/micro-rdk-nmea/src/lib.rs b/micro-rdk-nmea/src/lib.rs index 1c974b096..843f8bbd0 100644 --- a/micro-rdk-nmea/src/lib.rs +++ b/micro-rdk-nmea/src/lib.rs @@ -33,6 +33,9 @@ mod tests { let message = WaterDepth::from_cursor(cursor); assert!(message.is_ok()); let message = message.unwrap(); + let source_id = message.source_id(); + assert!(source_id.is_ok()); + assert_eq!(source_id.unwrap(), 255); let depth = message.depth(); assert!(depth.is_ok()); assert_eq!(depth.unwrap(), 2.12); @@ -55,6 +58,9 @@ mod tests { let message = WaterDepth::from_cursor(cursor); assert!(message.is_ok()); let message = message.unwrap(); + let source_id = message.source_id(); + assert!(source_id.is_ok()); + assert_eq!(source_id.unwrap(), 0); let depth = message.depth(); assert!(depth.is_ok()); assert_eq!(depth.unwrap(), 3.9); @@ -78,6 +84,10 @@ mod tests { let message = TemperatureExtendedRange::from_cursor(cursor); assert!(message.is_ok()); let message = message.unwrap(); + let source_id = message.source_id(); + assert!(source_id.is_ok()); + assert_eq!(source_id.unwrap(), 255); + let temp = message.temperature(); assert!(temp.is_ok()); let temp = temp.unwrap(); @@ -104,6 +114,10 @@ mod tests { assert!(message.is_ok()); let message = message.unwrap(); + let source_id = message.source_id(); + assert!(source_id.is_ok()); + assert_eq!(source_id.unwrap(), 58); + let altitude = message.altitude(); assert!(altitude.is_ok()); let altitude = altitude.unwrap(); @@ -146,6 +160,10 @@ mod tests { let message = message.unwrap(); println!("message: {:?}", message); + let source_id = message.source_id(); + assert!(source_id.is_ok()); + assert_eq!(source_id.unwrap(), 162); + let range_residual_mode = message.range_residual_mode(); println!("range_residual_mode: {:?}", range_residual_mode); assert!(matches!( diff --git a/micro-rdk-nmea/src/messages/pgns.rs b/micro-rdk-nmea/src/messages/pgns.rs index 6881595eb..0c2d2d2fb 100644 --- a/micro-rdk-nmea/src/messages/pgns.rs +++ b/micro-rdk-nmea/src/messages/pgns.rs @@ -163,14 +163,17 @@ pub struct NmeaMessage { data: MessageData, } -impl NmeaMessage { - pub fn new(mut bytes: Vec) -> Result { - let msg_data = bytes.split_off(32); - let metadata = NmeaMessageMetadata::try_from(bytes)?; +impl TryFrom> for NmeaMessage { + type Error = NmeaParseError; + fn try_from(mut value: Vec) -> Result { + let msg_data = value.split_off(32); + let metadata = NmeaMessageMetadata::try_from(value)?; let data = MessageData::from_bytes(metadata.pgn(), msg_data)?; Ok(Self { metadata, data }) } +} +impl NmeaMessage { pub fn to_readings(self) -> Result { Ok(HashMap::from([ (