1use std::time::Duration;
2
3pub fn parse_frequency(freq: &str) -> Result<(i64, String), String> {
6 let frequency = freq.trim();
7 if frequency.is_empty() {
8 return Err("empty freq string".to_string());
9 }
10 let mut i = 0usize;
12 for c in frequency.chars() {
13 if c.is_ascii_digit() {
14 i += 1;
15 } else {
16 break;
17 }
18 }
19 let n: i64 = if i == 0 {
20 1
21 } else {
22 frequency[..i]
23 .parse::<i64>()
24 .map_err(|e| format!("invalid number in freq: {}", e))?
25 };
26 let unit = frequency[i..].to_string();
27 if unit.is_empty() {
28 return Err("missing unit in freq".to_string());
29 }
30 let minutes: i64 = match unit.as_str() {
33 "N" | "ns" => return Err("nanoseconds not supported for minute kline".to_string()),
34 "U" | "us" | "μs" => return Err("microseconds not supported for minute kline".to_string()),
35 "L" | "ms" => return Err("milliseconds not supported for minute kline".to_string()),
36 "S" | "s" => return Err("seconds not supported for minute kline".to_string()),
37 "T" | "min" => n,
38 "H" | "h" => n * 60,
39 "D" | "d" => n * 60 * 24,
40 _ => return Err(format!("unsupported freq unit: {}", unit)),
41 };
42 Ok((minutes, frequency.to_string()))
43}