#enums #impl #methods #proc-macro #procedural #rename #auto-generating

enum-impl

自动生成枚举上常见方法的Rust过程宏

1 个不稳定版本

0.1.0 2024年1月6日

#78#rename

Download history 11/week @ 2024-03-28 9/week @ 2024-04-04 1/week @ 2024-05-30 1/week @ 2024-06-06 6/week @ 2024-06-20 118/week @ 2024-06-27

125 每月下载量

MIT/Apache

30KB
763 代码行

enum-impl

enum-impl 是一个Rust过程宏,通过为每个变体生成常见的方法和特质来简化枚举的使用。这有助于减少样板代码,并提高在Rust项目中使用枚举的舒适度。

特性

  • [pub] as_ref [= "rename"] 生成一个方法,返回枚举变体的关联数据的不可变引用。
  • [pub] as_ref_mut [= "rename"] 生成一个方法,返回枚举变体的关联数据的可变引用。
  • [pub] from [= "rename"] 生成一个方法,从关联数据创建枚举变体的实例。
  • impl from 为枚举实现 From 特质,从关联数据创建枚举变体的实例。
  • [pub] into [= "rename"] 生成一个方法,将枚举转换为关联数据变体。
  • [pub] is [= "rename"] 生成一个方法,返回一个布尔值,指示枚举实例是否匹配指定的变体。

用法

enum-impl 添加到您的 Cargo.toml

[dependencies]
enum-impl = "0.1"

在您的Rust代码中

use enum_impl::EnumImpl;

#[derive(EnumImpl)]
enum YourEnum {
    #[enum_impl(pub is)]
    Variant1,
    #[enum_impl(pub as_ref, as_ref_mut, impl from)]
    Variant2(i32),
    // ... add attributes to other variants as needed
}

fn main() {
    let instance = YourEnum::Variant1;

    // Use generated methods on enum instances
    assert!(instance.is_variant_1());

    let variant2_instance = YourEnum::from(42);
    assert_eq!(*variant2_instance.as_variant_2().unwrap(), 42);
}

更多示例可以在 示例 中找到。

依赖关系

~0.8–1.3MB
~25K SLoC