2 个版本

0.1.1 2023年1月3日
0.1.0 2023年1月3日

#1776数据库接口

MIT/Apache

13KB
186

此crate提供Rust的EnumMacroGen derive proc宏,简化了对枚举变体的处理。它根据给定的模板生成声明性宏。

示例

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,
}

不编写match语句来处理Test的每个变体,可以使用由EnumMacroGen生成的宏handle_test!

// <**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**>

派生EnumMacroGen

要使用EnumMacroGen,只需在枚举声明上方添加以下代码:#[derive(EnumMacroGen)]

您还可以使用enum_macro属性指定生成的宏的格式。属性值应包含一个令牌列表,其中包含$variant$fields,它们将分别用变体名称和字段替换。

依赖关系

~2MB
~44K SLoC