rocket::mtls::x509::der_parser::asn1_rs::nom::multi

Function fill

Source
pub fn fill<'a, I, O, E, F>(f: F, buf: &'a mut [O]) -> impl FnMut(I) + 'a
where I: Clone + PartialEq, F: Fn(I) -> Result<(I, O), Err<E>> + 'a, E: ParseError<I>,
Available on crate feature mtls only.
Expand description

Runs the embedded parser repeatedly, filling the given slice with results.

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

ยงArguments

  • f The parser to apply.
  • buf The slice to fill
use nom::multi::fill;
use nom::bytes::complete::tag;

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

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