macro_rules! struct_display {
    ( < $($rest:tt)* ) => { ... };
    ( $first:ident $($rest:tt)* ) => { ... };
    (
		@outer $inp_life_old:tt [$($param_decl:tt)*]
		input_lifetime = $inp_life:tt;
		$($rest:tt)*
	) => { ... };
    (
		@outer $inp_life:tt [$($param_decl_old:tt)*]
		params = { $($param_decl:tt)* }
		$($rest:tt)*
	) => { ... };
    (
		@outer $inp_life:tt [$($param_decl:tt)*]
		$name:ident
		$( < $($param:tt),* > )?
		{ $($fields:tt)* }
		= [ $($args:tt)* ]
	) => { ... };
    (
		@outer $inp_life:tt [$($param_decl:tt)*]
		$name:ident
		$( < $($param:tt),* > )?
		( $($fields:tt)* )
		= [ $($args:tt)* ]
	) => { ... };
    (
		@main $name:ident $inp_life:tt
		[ $($param_decl:tt)* ]
		[ $($param:tt),* ]
		[ $($fields:tt)* ]
		[ $($args:tt)* ]
	) => { ... };
}