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

MIT/Apache

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