1 个不稳定版本
0.1.13 | 2024 年 3 月 1 日 |
---|
#105 在 #枚举
11KB
90 代码行,不包括注释
将数字转换为枚举
此包提供了一个 derive 宏,用于生成将原始整数转换为枚举对应变体的函数。
生成的函数名为 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 许可证 2.0 版 或 MIT 许可证 下获得许可。除非您明确声明,否则根据 Apache-2.0 许可证定义的,您有意提交的任何贡献,都应作为上述双重许可,而不附加任何额外条款或条件。
依赖项
~285–740KB
~18K SLoC