Crate enum_macro_gen

source ·
Expand description

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.

Derive Macros§