nom::chaining_parser!
[−]
[src]
macro_rules! chaining_parser ( ($i:expr, $e:ident ~ $($rest:tt)*) => ( chaining_parser!($i, call!($e) ~ $($rest)*); ); ($i:expr, $submac:ident!( $($args:tt)* ) ~ $($rest:tt)*) => ( match $submac!($i, $($args)*) { $crate::IResult::Error(e) => $crate::IResult::Error(e), $crate::IResult::Incomplete(i) => $crate::IResult::Incomplete(i), $crate::IResult::Done(i,_) => { chaining_parser!(i, $($rest)*) } } ); ($i:expr, $e:ident ? ~ $($rest:tt)*) => ( chaining_parser!($i, call!($e) ? ~ $($rest)*); ); ($i:expr, $submac:ident!( $($args:tt)* ) ? ~ $($rest:tt)*) => ( match $submac!($i, $($args)*) { $crate::IResult::Incomplete(i) => $crate::IResult::Incomplete(i), res => { let input = if let $crate::IResult::Done(i,_) = res { i } else { $i }; chaining_parser!(input, $($rest)*) } } ); ($i:expr, $field:ident : $e:ident ~ $($rest:tt)*) => ( chaining_parser!($i, $field: call!($e) ~ $($rest)*); ); ($i:expr, $field:ident : $submac:ident!( $($args:tt)* ) ~ $($rest:tt)*) => ( match $submac!($i, $($args)*) { $crate::IResult::Error(e) => $crate::IResult::Error(e), $crate::IResult::Incomplete(i) => $crate::IResult::Incomplete(i), $crate::IResult::Done(i,o) => { let $field = o; chaining_parser!(i, $($rest)*) } } ); ($i:expr, mut $field:ident : $e:ident ~ $($rest:tt)*) => ( chaining_parser!($i, mut $field: call!($e) ~ $($rest)*); ); ($i:expr, mut $field:ident : $submac:ident!( $($args:tt)* ) ~ $($rest:tt)*) => ( match $submac!($i, $($args)*) { $crate::IResult::Error(e) => $crate::IResult::Error(e), $crate::IResult::Incomplete(i) => $crate::IResult::Incomplete(i), $crate::IResult::Done(i,o) => { let mut $field = o; chaining_parser!(i, $($rest)*) } } ); ($i:expr, $field:ident : $e:ident ? ~ $($rest:tt)*) => ( chaining_parser!($i, $field : call!($e) ? ~ $($rest)*); ); ($i:expr, $field:ident : $submac:ident!( $($args:tt)* ) ? ~ $($rest:tt)*) => ( match $submac!($i, $($args)*) { $crate::IResult::Incomplete(i) => $crate::IResult::Incomplete(i), res => { let ($field, input) = if let $crate::IResult::Done(i,o) = res { (Some(o), i) } else { (None, $i) }; chaining_parser!(input, $($rest)*) } } ); ($i:expr, mut $field:ident : $e:ident ? ~ $($rest:tt)*) => ( chaining_parser!($i, mut $field : call!($e) ? ~ $($rest)*); ); ($i:expr, mut $field:ident : $submac:ident!( $($args:tt)* ) ? ~ $($rest:tt)*) => ( match $submac!($i, $($args)*) { $crate::IResult::Incomplete(i) => $crate::IResult::Incomplete(i), res => { let (mut $field, input) = if let $crate::IResult::Done(i,o) = res { (Some(o), i) } else { (None, $i) }; chaining_parser!(input, $($rest)*) } } ); // ending the chain ($i:expr, $e:ident, $assemble:expr) => ( chaining_parser!($i, call!($e), $assemble); ); ($i:expr, $submac:ident!( $($args:tt)* ), $assemble:expr) => ( match $submac!($i, $($args)*) { $crate::IResult::Error(e) => $crate::IResult::Error(e), $crate::IResult::Incomplete(i) => $crate::IResult::Incomplete(i), $crate::IResult::Done(i,_) => { $crate::IResult::Done(i, $assemble()) } } ); ($i:expr, $e:ident ?, $assemble:expr) => ( chaining_parser!($i, call!($e) ?, $assemble); ); ($i:expr, $submac:ident!( $($args:tt)* ) ?, $assemble:expr) => ( match $submac!($i, $($args)*) { $crate::IResult::Incomplete(i) => $crate::IResult::Incomplete(i), res => { let input = if let $crate::IResult::Done(i,_) = res { i } else { $i }; $crate::IResult::Done(input, $assemble()) } } ); ($i:expr, $field:ident : $e:ident, $assemble:expr) => ( chaining_parser!($i, $field: call!($e), $assemble); ); ($i:expr, $field:ident : $submac:ident!( $($args:tt)* ), $assemble:expr) => ( match $submac!($i, $($args)*) { $crate::IResult::Error(e) => $crate::IResult::Error(e), $crate::IResult::Incomplete(i) => $crate::IResult::Incomplete(i), $crate::IResult::Done(i,o) => { let $field = o; $crate::IResult::Done(i, $assemble()) } } ); ($i:expr, mut $field:ident : $e:ident, $assemble:expr) => ( chaining_parser!($i, mut $field: call!($e), $assemble); ); ($i:expr, mut $field:ident : $submac:ident!( $($args:tt)* ), $assemble:expr) => ( match $submac!($i, $($args)*) { $crate::IResult::Error(e) => $crate::IResult::Error(e), $crate::IResult::Incomplete(i) => $crate::IResult::Incomplete(i), $crate::IResult::Done(i,o) => { let mut $field = o; $crate::IResult::Done(i, $assemble()) } } ); ($i:expr, $field:ident : $e:ident ? , $assemble:expr) => ( chaining_parser!($i, $field : call!($e) ? , $assemble); ); ($i:expr, $field:ident : $submac:ident!( $($args:tt)* ) ? , $assemble:expr) => ( match $submac!($i, $($args)*) { $crate::IResult::Incomplete(i) => $crate::IResult::Incomplete(i), $crate::IResult::Error(_) => { let $field = None; $crate::IResult::Done($i, $assemble()) }, $crate::IResult::Done(i,o) => { let $field = Some(o); $crate::IResult::Done(i, $assemble()) } } ); ($i:expr, mut $field:ident : $e:ident ? , $assemble:expr) => ( chaining_parser!($i, $field : call!($e) ? , $assemble); ); ($i:expr, mut $field:ident : $submac:ident!( $($args:tt)* ) ? , $assemble:expr) => ( match $submac!($i, $($args)*) { $crate::IResult::Incomplete(i) => $crate::IResult::Incomplete(i), $crate::IResult::Error(_) => { let mut $field = None; $crate::IResult::Done($i, $assemble()) }, $crate::IResult::Done(i,o) => { let mut $field = Some(o); $crate::IResult::Done(i, $assemble()) } } ); ($i:expr, $assemble:expr) => ( $crate::IResult::Done($i, $assemble()) ) );
Internal parser, do not use directly