coreutils/src/common/time.rs

36 lines
1.1 KiB
Rust
Raw Normal View History

2014-07-22 01:50:53 +00:00
/*
* This file is part of the uutils coreutils package.
*
* (c) Arcterus <arcterus@mail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
pub fn from_str(string: &str) -> Result<f64, String> {
let len = string.len();
if len == 0 {
return Err("empty string".to_string())
}
let slice = &string[..len - 1];
2014-07-22 01:50:53 +00:00
let (numstr, times) = match string.char_at(len - 1) {
2015-02-22 12:01:40 +00:00
's' | 'S' => (slice, 1usize),
'm' | 'M' => (slice, 60usize),
'h' | 'H' => (slice, 60usize * 60),
'd' | 'D' => (slice, 60usize * 60 * 24),
2014-07-22 01:50:53 +00:00
val => {
if !val.is_alphabetic() {
(string, 1)
} else if string == "inf" || string == "infinity" {
("inf", 1)
} else {
return Err(format!("invalid time interval '{}'", string))
}
}
};
match numstr.parse::<f64>() {
Ok(m) => Ok(m * times as f64),
Err(e) => Err(format!("invalid time interval '{}': {}", string, e))
2014-07-22 01:50:53 +00:00
}
}