Macro combine::dispatch [−][src]
macro_rules! dispatch { ($match_expr: expr; $( $($pat: pat)|+ $(if $pred:expr)? => $expr: expr ),+ $(,)? ) => { ... }; }
Expand description
dispatch!
allows a parser to be constructed depending on earlier input, without forcing each
branch to have the same type of parser
use combine::{dispatch, any, token, satisfy, EasyParser, Parser}; let mut parser = any().then(|e| { dispatch!(e; 'a' => token('a'), 'b' => satisfy(|b| b == 'b'), t if t == 'c' => any(), _ => token('d') ) }); assert_eq!(parser.easy_parse("aa"), Ok(('a', ""))); assert_eq!(parser.easy_parse("cc"), Ok(('c', ""))); assert_eq!(parser.easy_parse("cd"), Ok(('d', ""))); assert!(parser.easy_parse("ab").is_err());