2个不稳定版本
新 0.2.0 | 2024年8月19日 |
---|---|
0.1.0 | 2024年8月16日 |
#18 in #判别式
每月286次下载
在 safe-discriminant 中使用
9KB
128 行
safe-discriminant
safe-discriminant
提供了一种简约的、与no_std
兼容的特质和过程宏,用于在零成本下从枚举中提取判别式。它会自动生成unsafe { ... }
块,确保语义安全,因此您无需担心。
安装
这个crate可以在crates.io上找到,并且可以通过以下方式轻松地将其包含到您的项目中:
- 在您的Cargo.toml中添加以下行
[dependencies] safe-discriminant = "0.2.0"
- 或者在您的cargo项目中运行以下命令
$ cargo add safe-discriminant
用法
use safe_discriminant::Discriminant;
#[derive(Discriminant)]
#[repr(i64)]
pub enum Foo<T> {
A = 1,
B(T) = -1,
C { fst: T, snd: T } = -2,
}
fn main() {
let a: Foo<u8> = Foo::A;
let b = Foo::B(5);
let c = Foo::C { fst: 2, snd: 3 };
assert_eq!(a.discriminant(), 1);
assert_eq!(b.discriminant(), -1);
assert_eq!(c.discriminant(), -2);
}
类似项目
- strum提供了一系列宏,旨在简化枚举的用法。其中之一是
EnumDiscriminants
,它从枚举中提取每个变体的名称,并将它们组织到一个单独的枚举中。
依赖项
~250–700KB
~17K SLoC