nom::tap!
[−]
[src]
macro_rules! tap ( ($i:expr, $name:ident : $submac:ident!( $($args:tt)* ) => $e:expr) => ( { match $submac!($i, $($args)*) { $crate::IResult::Done(i,o) => { let $name = o; $e; $crate::IResult::Done(i, $name) }, $crate::IResult::Error(a) => $crate::IResult::Error(a), $crate::IResult::Incomplete(i) => $crate::IResult::Incomplete(i) } } ); ($i:expr, $name: ident: $f:expr => $e:expr) => ( tap!($i, $name: call!(f) => $e); ); );
tap!(name: I -> IResult<I,O> => { block }) => I -> IResult<I, O>
allows access to the parser's result without affecting it
named!(ptag, tap!(res: tag!( "abcd" ) => { println!("recognized {}", str::from_utf8(res).unwrap()) } ) ); let r = ptag(&b"abcdefgh"[..]); assert_eq!(r, Done(&b"efgh"[..], &b"abcd"[..]));