| Crates.io | enum_macro_gen |
| lib.rs | enum_macro_gen |
| version | 0.2.0 |
| created_at | 2023-01-03 21:11:02.531183+00 |
| updated_at | 2024-09-20 12:05:46.791167+00 |
| description | Macro generator for handling enums |
| homepage | https://github.com/da-x/enum_macro_gen |
| repository | https://github.com/da-x/enum_macro_gen |
| max_upload_size | |
| id | 750412 |
| size | 16,667 |
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.
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**>
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.