#enums #primitive

cenum

A rust derive macro for C-style primitive enums

6个稳定版本

1.1.1 2022年1月12日
1.0.3 2020年4月9日
1.0.2 2020年4月8日
1.0.1 2020年2月27日

#102 in #enum

每月 24 次下载
2 个crate中使用 (通过 basin2-data)

GPL-3.0-or-later

16KB
143 代码行

Cenum

目的

Cenum (C + Enum) 是一个小的Rust crate,它是 enum_primitive crate的精神继承者。它通过给定的枚举使用属性宏,允许从无字段的枚举(允许有区别)到 usize 以及反向的低成本转换。

用法

use cenum::{ cenum, Cenum }; // exposed trait is Cenum

#[cenum]
enum MyEnum {
    Value0,
    Value1,
    Value7 = 7,
    Value8,
    Value9,
}

fn test() {
    let some_value = MyEnum::Value8;
    let serialized = some_value.to_primitive(); // to_u32/other primitive types also works
    let is_value_discriminant = MyEnum::is_discriminant(serialized);
    let deserialized = MyEnum::from_primitive(serialized); // panics if invalid value
    assert!(is_value_discriminant);
    assert_eq!(some_value, deserialized);
    assert_eq!(serialized, 8);
}

依赖

~1.5MB
~36K SLoC