2 个版本
0.1.1 | 2023年1月3日 |
---|---|
0.1.0 | 2023年1月3日 |
#1776 在 数据库接口
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