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

no-std safe-discriminant

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

2 个不稳定版本

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

634Rust 模式

Download history 112/week @ 2024-08-11

每月下载量 112

BSD-3-Clause

7KB

safe-discriminant

safe-discriminant 提供了一个极简、与 no_std 兼容的特质和过程宏,用于在零成本下从枚举中提取判别式。它自动生成 unsafe { ... } 块,确保语义安全,因此您不必担心。

安装

此包在 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,它从枚举中提取每个变体的名称并将它们组织到一个单独的枚举中。

依赖关系

~265–710KB
~17K SLoC