ec4rs/glob/parser/
numrange.rs

1use 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}