8 个版本 (稳定)

1.2.2 2023 年 8 月 29 日
1.2.1 2022 年 6 月 1 日
1.1.0 2022 年 5 月 30 日
0.1.0 2022 年 5 月 29 日

#554 in Rust 模式

每月 23 次下载

MIT 许可证

20KB
219

提供 rust 枚举扩展

此软件包提供 Enumeration 特质,用于 rust enum,具有以下功能

  • 实现常见特质(Clone、Copy、Hash 等)
  • 通过常量 Enumeration::VARIANT_COUNT 获取变体的数量
  • 在索引(类型 Enumeration::Index)和枚举之间进行类型转换
  • 将一个常量值附加到每个变体上
  • 枚举的运行时表示
use enumeration::{prelude::*, OutOfRangeError};

enumerate!(pub Foo(u8; i32 = 11)
    Bar
    Baz = 99
);

pub fn main() -> Result<Foo, OutOfRangeError> {
    assert_eq!(Foo::Bar, Foo::variant(0)?);
    assert_eq!(Foo::Baz.to_index(), 1);
    assert_eq!(Foo::Bar.value(), 11);
    assert_eq!(Foo::Baz.value(), 99);
    
    let variants: Vec<Variant<_>> = vec![Foo::Bar.into(), SomeOtherExternalEnum::SomeVariant.into()];
    
    assert_eq!(variants[0].cast::<Foo>(), Ok(Foo::Bar));
    assert_eq!(variants[1].cast::<SomeOtherExternalEnum>(), Ok(SomeOtherExternalEnum::SomeVariant));
    assert!(variants[1].cast::<Foo>().is_err());
}

无运行时依赖