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 在 过程宏 中
22,186 每月下载量
用于 33 个 Crate(直接使用12个)
11KB
167 行
enum-kinds
为生成具有匹配变体但没有任何数据的枚举提供自定义 derive
换句话说,enum-kinds
会自动生成具有与原始枚举相同的变体集的枚举,但所有嵌入的数据都被移除(即,新生成的枚举的所有变体都是单元变体)。此外,enum-kinds
还实现了从原始枚举到单元变体版本的 From
特性。
此Crate与稳定的Rust版本兼容。此Crate替换了早期的 enum_kinds_macros
和 enum_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
中的每个变体匹配的单元变体。
生成枚举的附加属性
默认情况下,推导类型的枚举实现了 Debug
、Clone
、Copy
、PartialEq
和 Eq
特性。可以通过将它们包含到 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