3 unstable releases
0.2.0 | Sep 20, 2024 |
---|---|
0.1.1 | Jan 3, 2023 |
0.1.0 | Jan 3, 2023 |
#1182 in Database interfaces
21 downloads per month
15KB
214 lines
This crate provides the EnumMacroGen
derive proc macro for Rust, which
simplifies handling variants of an enum. It generates declartive macros
according to a given template.
Example
use enum_macro_gen::EnumMacroGen;
#[derive(EnumMacroGen)]
#[enum_macro[handle_test={match: $self.handle_$variant($fields);}]]
enum Test {
Foo(Item),
Double(Item, Box<Test>),
Bar,
}
Instead of writing a match
statement to handle each variant of Test
, you
can use the handle_test!
a macro generated by EnumMacroGen
.
// <**GENERATED**>
macro_rules! handle_test {
($self:ident, $test:ident) => {
match $test {
Test::Foo(a_0) => {
$self.handle_foo(a_0);
}
Test::Double(a_0, a_1) => {
$self.handle_double(a_0, a_1);
}
Test::Bar => {
$self.handle_bar();
}
}
};
}
// </**GENERATED**>
Deriving EnumMacroGen
To use EnumMacroGen
, simply add #[derive(EnumMacroGen)]
above your enum
declaration.
You can also specify the format of the generated macro with the enum_macro
attribute. The attribute value should be a token list containing $variant
and $fields
, which will be replaced with the variant name and fields,
respectively.
Dependencies
~2MB
~43K SLoC