MCPcopy Create free account
hub / github.com/cel-rust/cel-rust / parse_duration

Function parse_duration

cel/src/duration.rs:34–42  ·  view source on GitHub ↗

Parses a duration string into a [`Duration`]. Duration strings support the following grammar: DurationString -> Sign? Number Unit String? Sign -> '-' Number -> Digit+ ('.' Digit+)? Digit -> '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' Unit -> 'h' | 'm' | 's' | 'ms' | 'us' | 'ns' String -> DurationString # Examples - `1h` parses as 1 hour

(i: &str)

Source from the content-addressed store, hash-verified

32/// - `1ns` parses as 1 nanosecond
33/// - `1.5ns` parses as 1 nanosecond (sub-nanosecond durations not supported)
34pub fn parse_duration(i: &str) -> IResult<&str, Duration> {
35 let (i, neg) = opt(parse_negative)(i)?;
36 if i == "0" {
37 return Ok((i, Duration::zero()));
38 }
39 let (i, duration) = many1(parse_number_unit)(i)
40 .map(|(i, d)| (i, d.iter().fold(Duration::zero(), |acc, next| acc + *next)))?;
41 Ok((i, duration * if neg.is_some() { -1 } else { 1 }))
42}
43
44enum Unit {
45 Nanosecond,

Callers 3

assert_durationFunction · 0.85
durationFunction · 0.85
durationFunction · 0.85

Calls 2

mapMethod · 0.80
iterMethod · 0.45

Tested by

no test coverage detected