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