msg_tool\utils/
num_range.rs1pub fn check_range<T>(val: T, min: T, max: T) -> Result<T, String>
4where
5 T: PartialOrd,
6 T: std::fmt::Display,
7{
8 if val < min {
9 return Err(format!("Value {} is less than minimum {}", val, min));
10 } else if val > max {
11 return Err(format!("Value {} is greater than maximum {}", val, max));
12 }
13 Ok(val)
14}
15
16pub fn number_range<T>(s: &str, min: T, max: T) -> Result<T, String>
18where
19 T: std::str::FromStr,
20 <T as std::str::FromStr>::Err: std::fmt::Display,
21 T: PartialOrd,
22 T: std::fmt::Display,
23{
24 debug_assert!(min <= max, "min should be less than or equal to max");
25 let val = s.parse::<T>().map_err(|e| format!("{}", e))?;
26 check_range(val, min, max)
27}