macro_rules! field_map_fn {
($map_fn_ty:ty, Output = $output:ty; $($rest:tt)*) => { ... };
($(#[$meta_attr:meta])* $map_fn_ty:ident {
type Output = $output:ty;
$($attr:ident: $attr_ty:ty),*
} $($rest:tt)*) => { ... };
($(#[$meta_attr:meta])* $map_fn_ty:ident<($($generics:tt)*)> {
type Output = $output:ty;
$($attr:ident: $attr_ty:ty),*
} $($rest:tt)*) => { ... };
($(#[$meta_attr:meta])* $map_fn_ty:ident<($($generics:tt)*)> where ($($bounds:tt)*) {
type Output = $output:ty;
$($attr:ident: $attr_ty:ty),*
} $($rest:tt)*) => { ... };
($(#[$meta_attr:meta])* pub $map_fn_ty:ident {
type Output = $output:ty;
$($attr:ident: $attr_ty:ty),*
} $($rest:tt)*) => { ... };
($(#[$meta_attr:meta])* pub $map_fn_ty:ident<($($generics:tt)*)> {
type Output = $output:ty;
$($attr:ident: $attr_ty:ty),*
} $($rest:tt)*) => { ... };
($(#[$meta_attr:meta])* pub $map_fn_ty:ident<($($generics:tt)*)> where ($($bounds:tt)*) {
type Output = $output:ty;
$($attr:ident: $attr_ty:ty),*
} $($rest:tt)*) => { ... };
}