ec4rs/glob/parser/
numrange.rs1use super::Chars;
2
3fn parse_int(chars: &mut Chars<'_>, breaker: char) -> Option<String> {
4 let mut num = String::with_capacity(2);
5 num.push(chars.next().filter(|c| c.is_numeric() || *c == '-')?);
6 for c in chars {
7 if c.is_numeric() {
8 num.push(c)
9 } else if c == breaker {
10 return Some(num);
11 } else {
12 break;
13 }
14 }
15 None
16}
17
18pub fn parse(mut chars: Chars<'_>) -> Option<(isize, isize, Chars<'_>)> {
19 let num_a = parse_int(&mut chars, '.')?;
20 if !matches!(chars.next(), Some('.')) {
21 return None;
22 }
23 let num_b: String = parse_int(&mut chars, '}')?;
24 Some((num_a.parse().ok()?, num_b.parse().ok()?, chars))
25}