#枚举 #整数 #过程宏 #定义 #程序 #自动 #整数类似

integral-enum

定义整数类似枚举的简单方法

14个稳定版本

3.0.1 2023年3月31日
3.0.0 2023年3月28日
2.1.1 2023年1月7日
1.2.1 2022年12月28日

#1548 in 过程宏


5 个crate中(4个直接) 使用

无许可协议

8KB
149

integral-enum

用于轻松定义整数类似枚举的过程宏

用法

use integral_enum::integral_enum;

// Discriminant will be automatically determined based on the variants count (from u8 to u64).
#[integral_enum]
// After macro expansion repr will be added automatically
// #[repr(u8)]
pub enum Animal {
    Cat,
    Dog,
    Human,
}

// But discriminant type can be defined manually.
#[integral_enum(u64)]
// Same here
// #[repr(u64)]
pub enum Person {
    Nero,
    // Explicit discriminants also supported
    NotNero = 102400,
    PossiblyNero, // = 102401
    AlmostNero,
}

// integral_enum derives the following traits automatically: Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord.
// And additionally creates implementation for the TryFrom trait:
assert_eq!(Animal::try_from(0), Ok(Animal::Cat));
assert_eq!(Animal::try_from(1), Ok(Animal::Dog));
assert_eq!(Animal::try_from(2), Ok(Animal::Human));

assert_eq!(Person::try_from(0), Ok(Person::Nero));
assert_eq!(Person::try_from(102400), Ok(Person::NotNero));
assert_eq1(Person::try_from(102401), Ok(Person::PossiblyNero));

依赖

~0.4–0.8MB
~19K SLoC