# Function nom::multi::fill

source · [−]

    pub fn fill<'a, I, O, E, F>(
        f: F,
        buf: &'a mut [O]
    ) -> impl FnMut(I) -> IResult<I, (), E> + 'a where
        I: Clone + PartialEq,
        F: Fn(I) -> IResult<I, O, E> + 'a,
        E: ParseError<I>,

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"])));