Function chomp::combinators::count [] [src]

pub fn count<I: Input, T, E, F, U>(
    i: I,
    num: usize,
    p: F
) -> ParseResult<I, T, E> where
    F: FnMut(I) -> ParseResult<I, U, E>,
    T: FromIterator<U>, 

Applies the parser p exactly num times collecting all items into T: FromIterator.

use chomp::prelude::*;

fn parse<I: U8Input>(i: I) -> SimpleResult<I, Vec<u8>> {
    count(i, 2, |i| token(i, b'a'))
}

assert_eq!(parse_only(parse, b"a  "), Err((&b"  "[..], Error::expected(b'a'))));
assert_eq!(parse_only(parse, b"aa "), Ok(vec![b'a', b'a']));

let with_remainder = |i| parse(i).bind(|i, d| take_remainder(i).map(|r| (r, d)));

assert_eq!(parse_only(with_remainder, b"aaa"), Ok((&b"a"[..], vec![b'a', b'a'])));