#枚举 #repr #判别式 #常量 #过程宏 #转换

无 std enum-repr

派生枚举 repr 转换,与类型别名兼容

10 个版本

0.2.6 2020 年 2 月 17 日
0.2.5 2019 年 10 月 1 日
0.2.4 2019 年 3 月 16 日
0.2.3 2019 年 1 月 20 日
0.1.1 2018 年 7 月 21 日

#1194Rust 模式

Download history 5911/week @ 2024-03-16 5385/week @ 2024-03-23 7590/week @ 2024-03-30 9091/week @ 2024-04-06 10304/week @ 2024-04-13 10010/week @ 2024-04-20 13799/week @ 2024-04-27 16928/week @ 2024-05-04 16600/week @ 2024-05-11 34735/week @ 2024-05-18 27648/week @ 2024-05-25 31888/week @ 2024-06-01 33099/week @ 2024-06-08 29399/week @ 2024-06-15 33258/week @ 2024-06-22 13584/week @ 2024-06-29

114,479 每月下载量
用于 20 crate(8 个直接使用)

MIT/Apache

15KB
179

enum-repr

Build Status Crates.io Documentation

生成与类型别名兼容的枚举 repr 转换。在 no_std 中运行。

EnumRepr 过程宏接受一个 type 参数,并为使用的枚举定义了两个函数

fn repr(&self) -> EnumReprType
fn from_repr(x: EnumReprType) -> Option<Self>

实际的枚举判别式仍然保留为 isize

extern crate enum_repr;
extern crate libc;

use libc::*;

use enum_repr::EnumRepr;

#[EnumRepr(type = "c_int")]
#[derive(Debug, PartialEq)]
pub enum IpProto {
    IP = IPPROTO_IP,
    IPv6 = IPPROTO_IPV6,
    //
}

fn main() {
    assert_eq!(IpProto::IP.repr(), IPPROTO_IP);
    assert_eq!(IpProto::from_repr(IPPROTO_IPV6), Some(IpProto::IPv6));
    assert!(IpProto::from_repr(12345).is_none());
}

许可证

本项目受以下任一许可证的许可:

由您选择。

依赖项

~1.5MB
~36K SLoC