1#[macro_export] macro_rules! rec {
2 (@mkstruct (
3 [$firstlet:ident, $($letter:ident),*],
4 { }
5 ) -> ([$($letter_out:ident),*], {$($id_out:ident : $val_out:expr),*})) => {
6 {
7 struct Rec<$($letter_out,)*> { $($id_out : $letter_out),* }
8 Rec { $($id_out : $val_out),* }
9 }
10 };
11 (@mkstruct (
12 [ $letter0:ident, $($letter:ident),* ],
13 { $id0:ident : $val0:expr $(,$id:ident : $val:expr)* }
14 ) -> ([ $($letter_out:ident),* ], { $($id_out:ident : $val_out:expr),* })) => {
15 rec!(@mkstruct([$($letter),*], { $($id : $val),* }) -> (
16 [$letter0 $(,$letter_out)*],
17 { $id0 : $val0 $(,$id_out : $val_out)* }
18 ));
19 };
20 { $($id:ident : $val:expr),+ } => {
21 rec!(@mkstruct([A,B,C,D,E,F,G,H,I,J,K,L], { $($id : $val),* } ) -> ([],{}) );
22 }
23}