[−][src]Function combine::parser::combinator::factory
pub fn factory<P, R>(p: P) -> Factory<P, R> where
P: FnMut() -> R,
R: Parser,
Constructs the parser lazily on each parse_*
call. This is similar to lazy
but it
allows different parsers to be returned on each call to p
while still reporting the correct
errors.
let mut parsers: Vec<FnOpaque<_, _>> = vec![opaque(|f| f(&mut digit())), opaque(|f| f(&mut letter()))]; let mut iter = parsers.into_iter().cycle(); let mut parser = many(factory(move || iter.next().unwrap())); assert_eq!(parser.parse("1a2b3cd"), Ok(("1a2b3c".to_string(), "d")));