#[macro_export]
#[doc(hidden)]
macro_rules! __parse_struct_body {
(
@parse
body = {$($body:tt)*},
callback = $callback:ident ($($headers:tt)*)
) => {
__parse_struct_body! {
body = ($($body)*,),
buff = ( attr [] ),
fields = [],
callback = $callback ($($headers)*)
}
};
(
body = ($($body:tt)*),
callback = $callback:ident ($($headers:tt)*)
) => {
__parse_struct_body! {
body = ($($body)*,),
buff = ( attr [] ),
fields = [],
callback = $callback ($($headers)*)
}
};
(
body = (
#[$($meta:tt)*]
$($tail:tt)*),
buff = ( attr [$($attr:tt)*] ),
fields = $fields:tt,
callback = $callback:ident ($($headers:tt)*)
) => {
__parse_struct_body! {
body = ($($tail)*),
buff = ( attr [$($attr)* #[$($meta)*]] ),
fields = $fields,
callback = $callback ($($headers)*)
}
};
(
body = (
pub $field_name:ident
$($tail:tt)*),
buff = $buff:tt,
fields = $fields:tt,
callback = $callback:ident ($($headers:tt)*)
) => {
__parse_struct_body! {
body = ($field_name $($tail)*),
buff = $buff,
fields = $fields,
callback = $callback ($($headers)*)
}
};
(
body = (,),
buff = $buff:tt,
fields = $fields:tt,
callback = $callback:ident ($($headers:tt)*)
) => {
__parse_struct_body! {
body = (),
buff = $buff,
fields = $fields,
callback = $callback ($($headers)*)
}
};
(
body = ($field_name:ident : $field_ty:ty, $($tail:tt)*),
buff = ( attr $field_attr:tt ),
fields = [$($fields:tt)*],
callback = $callback:ident ($($headers:tt)*)
) => {
__parse_struct_body! {
body = ($($tail)*),
buff = ( attr [] ),
fields = [$($fields)* {
field_name: $field_name,
field_ty: $field_ty,
field_attr: $field_attr,
}],
callback = $callback ($($headers)*)
}
};
(
body = (),
buff = ( attr [] ),
fields = $fields:tt,
callback = $callback:ident ($($headers:tt)*)
) => {
$callback! {
$($headers)*
fields = $fields,
}
};
}