Function combine::parser [] [src]

pub fn parser<I, O, F>(f: F) -> FnParser<I, F> where I: Stream, F: FnMut(I) -> ParseResult<O, I>

Wraps a function, turning it into a parser Mainly needed to turn closures into parsers as function types can be casted to function pointers to make them usable as a parser

 extern crate combine;
 use combine::*;
 use combine::primitives::{Consumed, Error};
 let mut even_digit = parser(|input| {
     // Help type inference out
     let _: &str = input;
     let position = input.position();
     let (char_digit, input) = try!(digit().parse_state(input));
     let d = (char_digit as i32) - ('0' as i32);
     if d % 2 == 0 {
         Ok((d, input))
     }
     else {
         //Return an empty error since we only tested the first token of the stream
         let errors = ParseError::new(position, Error::Expected(From::from("even number")));
         Err(Consumed::Empty(errors))
     }
 });
 let result = even_digit
     .parse("8")
     .map(|x| x.0);
 assert_eq!(result, Ok(8));