Macro synom::not [] [src]

macro_rules! not {
    ($i:expr, $submac:ident!( $($args:tt)* )) => { ... };
}

Parses successfully if the given parser fails to parse. Does not consume any of the input.

extern crate syn;
#[macro_use] extern crate synom;
use synom::IResult;

// Parses a shebang line like `#!/bin/bash` and returns the part after `#!`.
// Note that a line starting with `#![` is an inner attribute, not a
// shebang.
named!(shebang -> &str, preceded!(
    tuple!(tag!("#!"), not!(tag!("["))),
    take_until!("\n")
));

fn main() {
    let bin_bash = "#!/bin/bash\n";
    let parsed = shebang(bin_bash).expect("shebang");
    assert_eq!(parsed, "/bin/bash");

    let inner_attr = "#![feature(specialization)]\n";
    let err = shebang(inner_attr);
    assert_eq!(err, IResult::Error);
}