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());