2 个不稳定版本
0.2.0 | 2020 年 3 月 2 日 |
---|---|
0.1.1 | 2020 年 2 月 25 日 |
0.1.0 |
|
2864 在 Rust 模式 中
每月 440 次下载
7KB
62 行
numeric-enum-macro
类型安全的枚举到数字转换的声明性宏。 无 std
支持!
use numeric_enum_macro::numeric_enum;
numeric_enum! {
#[repr(i64)] // repr must go first.
/// Some docs.
///
/// Multiline docs works too.
#[derive(Debug, PartialEq, PartialOrd, Ord, Eq, Hash)] // all the attributes are forwarded!
pub enum Lol {
// All the constants must have explicit values assigned!
Kek = 14,
Wow = 87,
}
}
// Conversion to raw number:
assert_eq!(14i64, Lol::Kek.into());
// Conversion from raw number:
assert_eq!(Ok(Lol::Wow), Lol::try_from(87));
// Unknown number:
assert_eq!(Err(88), Lol::try_from(88));
许可协议:MIT/Apache-2.0
lib.rs
:
类型安全的枚举到数字转换的声明性宏。 无 std
支持!
use numeric_enum_macro::numeric_enum;
numeric_enum! {
#[repr(i64)] // repr must go first.
/// Some docs.
///
/// Multiline docs works too.
#[derive(Debug, PartialEq, PartialOrd, Ord, Eq, Hash)] // all the attributes are forwarded!
pub enum Lol {
// All the constants must have explicit values assigned!
Kek = 14,
Wow = 87,
}
}
const KEK: u32 = 0;
const WOW: u32 = 1;
numeric_enum! {
#[repr(u32)] // repr must go first.
/// Some docs.
///
/// Multiline docs works too.
#[derive(Debug, PartialEq, PartialOrd, Ord, Eq, Hash)] // all the attributes are forwarded!
pub enum Lol2 {
/// This is KEK
Kek = KEK,
/// And this is WOW
Wow = WOW,
}
}
// Conversion to raw number:
assert_eq!(14i64, Lol::Kek.into());
// Conversion from raw number:
assert_eq!(Ok(Lol::Wow), Lol::try_from(87));
// Unknown number:
assert_eq!(Err(88), Lol::try_from(88));
assert_eq!(Ok(Lol2::Wow), Lol2::try_from(WOW));