Uh, this blog says "introducing", but this is hardly new. I have seen this crate around for a while, and https://crates.io/crates/crabtime/versions corroborates that.
Is this an old blog? I can't find a date on it.
Uh, this blog says "introducing", but this is hardly new. I have seen this crate around for a while, and https://crates.io/crates/crabtime/versions corroborates that.
Is this an old blog? I can't find a date on it.
Might not be new but it's not been posted here before :)
(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,)*);
};
() => {};
}
Not nearly as readable though
It was just a quick solution showing how to do it with one macro and zero dependencies, utilizing the power of meta variables. It probably can be made nicer.
Side Note: It's not directly relevant/needed here, but this also shows that maybe a theoretical $reverse{} meta variable can be useful with repeated patterns, to in this case generate the variants in the expected order.
Doesn't support derive macros, unfortunately.
Welcome to the Rust community! This is a place to discuss about the Rust programming language.
Credits