#enums #macro-derive #derive #deriving #proc-macro #macro

macro enum-kinds

生成具有匹配变体但没有任何关联数据的枚举

6个版本

0.5.1 2021年8月17日
0.5.0 2020年5月13日
0.4.1 2018年8月22日
0.4.0 2018年3月10日
0.3.1 2018年3月7日

#330过程宏

Download history 7490/week @ 2024-01-20 6853/week @ 2024-01-27 7736/week @ 2024-02-03 7785/week @ 2024-02-10 7473/week @ 2024-02-17 7332/week @ 2024-02-24 7745/week @ 2024-03-02 6835/week @ 2024-03-09 6904/week @ 2024-03-16 7385/week @ 2024-03-23 8351/week @ 2024-03-30 6454/week @ 2024-04-06 5524/week @ 2024-04-13 5175/week @ 2024-04-20 4482/week @ 2024-04-27 5852/week @ 2024-05-04

22,186 每月下载量
用于 33 Crate(直接使用12个)

MIT 许可证

11KB
167

enum-kinds

Build Status Latest Version Rust Documentation

为生成具有匹配变体但没有任何数据的枚举提供自定义 derive

换句话说,enum-kinds 会自动生成具有与原始枚举相同的变体集的枚举,但所有嵌入的数据都被移除(即,新生成的枚举的所有变体都是单元变体)。此外,enum-kinds 还实现了从原始枚举到单元变体版本的 From 特性。

此Crate与稳定的Rust版本兼容。此Crate替换了早期的 enum_kinds_macrosenum_kinds_traits Crate。

示例

#[macro_use]
extern crate enum_kinds;

#[derive(EnumKind)]
#[enum_kind(SomeEnumKind)]
enum SomeEnum {
    First(String, u32),
    Second(char),
    Third
}

#[test]
fn test_enum_kind() {
    let first = SomeEnum::First("Example".to_owned(), 32);
    assert_eq!(SomeEnumKind::from(&first), SomeEnumKind::First);
}

#[derive(EnumKind)] 属性会自动创建另一个名为 SomeEnumKind 的枚举,该枚举包含与 SomeEnum 中的每个变体匹配的单元变体。

生成枚举的附加属性

默认情况下,推导类型的枚举实现了 DebugCloneCopyPartialEqEq 特性。可以通过将它们包含到 enum_kind 属性中来附加额外的属性到生成的 enum#[enum_kind(NAME, derive(SomeTrait), derive(AnotherTrait))]。例如,要实现 Serde的 序列化和反序列化特性

#[macro_use]
extern crate enum_kinds;

#[macro_use]
extern crate serde_derive;
extern crate serde;

#[derive(EnumKind)]
#[enum_kind(AdditionalDerivesKind, derive(Serialize, Deserialize))]
enum AdditionalDerives {
    Variant(String, u32),
    Another(String)
}

no_std 支持

enum-kinds 可以通过启用 no-stdlib 特性在不使用标准库的情况下使用。

问题

如果您在使用此crate时遇到任何问题,请向 问题跟踪器 报告。

许可协议

该crate可在 MIT 许可协议 下获得。

依赖项

~1.5MB
~34K SLoC