MCPcopy Create free account
hub / github.com/It4innovations/hyperqueue / parse_range

Function parse_range

crates/hyperqueue/src/common/arrayparser.rs:9–25  ·  view source on GitHub ↗

Parse integer range in the format n[-end][:step].

()

Source from the content-addressed store, hash-verified

7
8/// Parse integer range in the format n[-end][:step].
9fn parse_range() -> impl CharParser<IntRange> {
10 let start = parse_u32().labelled("start");
11 let end = just("-").ignore_then(parse_u32()).labelled("end").or_not();
12 let step = just(":").ignore_then(parse_u32()).labelled("step").or_not();
13
14 let parser = start.then(end).then(step);
15 parser
16 .try_map(|((start, end), step), span| match (start, end, step) {
17 (v, None, None) => Ok(IntRange::new(v, 1, 1)),
18 (v, Some(w), None) if w >= v => Ok(IntRange::new(v, w - v + 1, 1)),
19 (v, Some(w), Some(x)) if w >= v && x <= w - v && x > 0 => {
20 Ok(IntRange::new(v, w - v + 1, x))
21 }
22 _ => Err(ParseError::custom(span, "Invalid range")),
23 })
24 .labelled("Integer range")
25}
26
27/// Parses integer ranges separated by commas.
28fn parse_ranges() -> impl CharParser<Vec<IntRange>> {

Callers 1

parse_rangesFunction · 0.70

Calls 1

parse_u32Function · 0.85

Tested by

no test coverage detected