tiny_nmea/
common.rs

1use crate::message::Time;
2use heapless::String;
3
4#[macro_export]
5macro_rules! substring {
6    ($string:expr, $start:expr, $length:expr) => {
7        $string.chars().skip($start).take($length).collect::<String<$length>>()
8    };
9    ($string:expr, $start:expr, $length:expr, $max_length:expr) => {
10        $string.chars().skip($start).take($length).collect::<String<$max_length>>()
11    };
12}
13
14pub fn parse_time(str: &str) -> Result<Time, ()> {
15    let hour = substring!(str, 0, 2).parse::<u8>().map_err(|_| ())?;
16    let minute = substring!(str, 2, 2).parse::<u8>().map_err(|_| ())?;
17    let second = substring!(str, 4, 2).parse::<u8>().map_err(|_| ())?;
18    let millisecond = substring!(str, 7, 2).parse::<u8>().map_err(|_| ())?;
19    Ok(Time {
20        hour,
21        minute,
22        second,
23        millisecond,
24    })
25}