15个版本
0.1.14 | 2024年7月30日 |
---|---|
0.1.13 | 2024年1月2日 |
0.1.12 | 2023年9月2日 |
0.1.11 | 2023年7月21日 |
0.1.0 | 2018年12月6日 |
#216 in #integer
407,751 每月下载量
在 284 个crate中(22直接) 使用
11KB
90 行
将数字转换为枚举
此crate提供了一个派生宏,用于生成将原始整数转换为枚举相应变体的函数。
生成的函数名为 n
,其签名如下
impl YourEnum {
pub fn n(value: Repr) -> Option<Self>;
}
其中 Repr
是一个整数类型,其大小如以下更详细描述中所述。
示例
use enumn::N;
#[derive(PartialEq, Debug, N)]
enum Status {
LegendaryTriumph,
QualifiedSuccess,
FortuitousRevival,
IndeterminateStalemate,
RecoverableSetback,
DireMisadventure,
AbjectFailure,
}
fn main() {
let s = Status::n(1);
assert_eq!(s, Some(Status::QualifiedSuccess));
let s = Status::n(9);
assert_eq!(s, None);
}
签名
生成的签名取决于枚举是否有 #[repr)]
属性。如果指定了 repr
,则输入的代码必须为该类型。
#[derive(enumn::N)]
#[repr(u8)]
enum E {
/* ... */
}
// expands to:
impl E {
pub fn n(value: u8) -> Option<Self> {
/* ... */
}
}
另一方面,如果没有指定 repr
,则签名将泛化到多种可能类型。
impl E {
pub fn n<REPR: Into<i64>>(value: REPR) -> Option<Self> {
/* ... */
}
}
判别器
转换将尊重显式指定的枚举判别器。考虑以下枚举
#[derive(enumn::N)]
enum Letter {
A = 65,
B = 66,
}
Here Letter::n((65))
会返回 Some::Letter::A
.
许可
根据您的选择,许可为Apache许可证,版本2.0或MIT许可证。除非您明确声明,否则任何有意提交以包含在此crate中的贡献,根据Apache-2.0许可证定义,都应按上述方式双许可,不得附加任何额外条款或条件。
依赖
~270–720KB
~17K SLoC