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}