noders/
macros.rs

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}