1use std::num::ParseIntError;
2
3use std::time::Duration;
4
5pub fn parse_duration(s: &str) -> Result<Duration, String> {
6 let len = s.len();
7 if len < 2 {
8 return Err("Invalid duration format".to_string());
9 }
10 let (num_str, unit) = s.split_at(len - 1);
11 let num: u64 = num_str.parse().map_err(|e: ParseIntError| e.to_string())?;
12
13 match unit {
14 "s" => Ok(Duration::from_secs(num)),
15 "m" => Ok(Duration::from_secs(num * 60)),
16 "h" => Ok(Duration::from_secs(num * 60 * 60)),
17 "d" => Ok(Duration::from_secs(num * 60 * 60 * 24)),
18 _ => Err("Invalid duration unit".to_string()),
19 }
20}