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.
Welcome to the Rust community! This is a place to discuss about the Rust programming language.
Credits