combine 3.0.0-beta.1

Fast parser combinators on arbitrary streams with zero-copy support.
Documentation
#[macro_export]
#[doc(hidden)]
macro_rules! seq_parser_impl {
    (; $name: ident $($tt: tt)*) => {
        $name { $($tt)* }
    };
    (_ : $first_parser: expr; $name: ident $($tt: tt)*) => {
        $name { $($tt)* }
    };
    ($first_field: ident : $first_parser: expr; $name: ident $($tt: tt)*) => {
        seq_parser_impl!(; $name $($tt)* $first_field : $first_field,)
    };
    (_ : $first_parser: expr, $($field: ident : $parser: expr),+; $name: ident $($tt: tt)*) => {
        seq_parser_impl!( $($field : $parser),+; $name $($tt)* )
    };
    ($first_field: ident : $first_parser: expr, $($field: ident : $parser: expr),+; $name: ident $($tt: tt)*) => {
        seq_parser_impl!( $($field : $parser),+; $name $($tt)* $first_field: $first_field, )
    };
}

#[macro_export]
macro_rules! seq_parser { 
    ($name: ident { $($field: ident : $parser: expr),* }) => {
        ( $($parser),* )
            .map(|( $($field),* )|
                seq_parser_impl!($($field : $parser),*; $name )
            )
    }
}
struct Test {
    a: i32,
    b: i32,
}
fn main() {
    seq_parser!(Test { a: 1, b: 2 });
}