safe_remove/
utils.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
use std::num::ParseIntError;

use std::time::Duration;

pub fn parse_duration(s: &str) -> Result<Duration, String> {
    let len = s.len();
    if len < 2 {
        return Err("Invalid duration format".to_string());
    }
    let (num_str, unit) = s.split_at(len - 1);
    let num: u64 = num_str.parse().map_err(|e: ParseIntError| e.to_string())?;

    match unit {
        "s" => Ok(Duration::from_secs(num)),
        "m" => Ok(Duration::from_secs(num * 60)),
        "h" => Ok(Duration::from_secs(num * 60 * 60)),
        "d" => Ok(Duration::from_secs(num * 60 * 60 * 24)),
        _ => Err("Invalid duration unit".to_string()),
    }
}