devela::_dep::winnow::combinator

Function fill

pub fn fill<'i, Input, Output, Error, ParseNext>(
    parser: ParseNext,
    buf: &'i mut [Output],
) -> impl Parser<Input, (), Error> + 'i
where Input: Stream + 'i, ParseNext: Parser<Input, Output, Error> + 'i, Error: ParserError<Input> + 'i,
Available on crate feature dep_winnow only.
Expand description

Repeats the embedded parser, filling the given slice with results.

This parser fails if the input runs out before the given slice is full.

ยงExample

use winnow::combinator::fill;

fn parser(s: &str) -> IResult<&str, [&str; 2]> {
  let mut buf = ["", ""];
  let (rest, ()) = fill("abc", &mut buf).parse_peek(s)?;
  Ok((rest, buf))
}

assert_eq!(parser("abcabc"), Ok(("", ["abc", "abc"])));
assert_eq!(parser("abc123"), Err(ErrMode::Backtrack(InputError::new("123", ErrorKind::Tag))));
assert_eq!(parser("123123"), Err(ErrMode::Backtrack(InputError::new("123123", ErrorKind::Tag))));
assert_eq!(parser(""), Err(ErrMode::Backtrack(InputError::new("", ErrorKind::Tag))));
assert_eq!(parser("abcabcabc"), Ok(("abc", ["abc", "abc"])));