3个稳定版本
1.0.2 | 2024年3月3日 |
---|---|
1.0.1 | 2024年3月2日 |
1848 在 Rust模式
每月43次下载
12KB
98 代码行
将数字转换为枚举
此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
,则 n
的输入必须为该类型。
#[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,
}
在这里,Letter::n(65)
将返回 Some(Letter::A)
。
许可证
根据您的选择,许可协议为 Apache License, Version 2.0 或 MIT许可证。除非您明确表示,否则根据Apache-2.0许可证定义,您有意提交的任何贡献都将根据上述协议双许可,不附加任何额外条款或条件。
依赖项
~255–700KB
~17K SLoC