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

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

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

 use chomp::{U8Result, ParseError, Error, Input, parse_only, count, token, take_remainder};

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

 assert_eq!(parse_only(parse, b"a  "), Err(ParseError::Error(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'])));