#枚举 #判别式 #特质 #简约 #提取 #零成本 #兼容

no-std safe-discriminant-derive

一个简约的、与no_std兼容的特质和过程宏,用于在零成本下从枚举中提取判别式

2个不稳定版本

0.2.0 2024年8月19日
0.1.0 2024年8月16日

#18 in #判别式

Download history 93/week @ 2024-08-10 193/week @ 2024-08-17

每月286次下载
safe-discriminant 中使用

BSD-3-Clause

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