(slightly edited from initial version)
#![feature(macro_metavar_expr_concat)]
#![feature(macro_metavar_expr)]
macro_rules! gen_enums {
([$($name:ident)+]) => {
gen_enums!(${count($name)}: [$($name)+]);
};
($n:literal: [$($name:ident)+]) => {
enum ${concat(Position, $n)} { $($name,)+ }
};
($name:ident, $($tail:ident,)*) => {
gen_enums!([$name $($tail)*]);
gen_enums!($($tail,)*);
};
() => {};
}