pub fn skip_until<Input, P>(end: P) -> SkipUntil<Input, P> where
<Input as StreamOnce>::Error: ParseError<<Input as StreamOnce>::Token, <Input as StreamOnce>::Range, <Input as StreamOnce>::Position>,
Input: Stream,
P: Parser<Input>,
Expand description
Skips input until end
is encountered or end
indicates that it has committed input before
failing (attempt
can be used to make it look like it has not committed any input)
let mut char_parser = skip_until(char::digit());
assert_eq!(char_parser.parse("abc123"), Ok(((), "123")));
let mut byte_parser = skip_until(byte::bytes(&b"TAG"[..]));
assert_eq!(byte_parser.parse(&b"123TAG"[..]), Ok(((), &b"TAG"[..])));
assert!(byte_parser.parse(&b"123TATAG"[..]).is_err());
// `attempt` must be used if the `end` should consume input before failing
let mut byte_parser = skip_until(attempt(byte::bytes(&b"TAG"[..])));
assert_eq!(byte_parser.parse(&b"123TATAG"[..]), Ok(((), &b"TAG"[..])));