macro_rules! component {
(
$name:ident, $( ( $($c_t:ident$(: $c_tr:ident)* ),* ),)*
inputs($( $input_field_name:ident: $input_field_type:ty ),* $( where $( $i_t:ident$(: $i_tr:ident)* ),* )* ),
inputs_array($( $input_array_name:ident: $input_array_type:ty ),* $( where $( $ia_t:ident$(: $ia_tr:ident)* ),* )* ),
outputs($($output_field_name:ident: $output_field_type:ty ),* $( where $($o_t:ident$(: $o_tr:ident)* ),* )* ),
outputs_array($($output_array_name:ident: $output_array_type:ty ),* $( where $($oa_t:ident$(: $oa_tr:ident)* ),* )* ),
option($($option_type:ty)*),
acc($($acc_type:ty)*),
fn run(&mut $arg:ident) $fun:block
$($more:item)*
) => { ... };
}