2 unstable releases
0.2.0 | Mar 2, 2020 |
---|---|
0.1.1 | Feb 25, 2020 |
0.1.0 |
|
#1955 in Rust patterns
2,082 downloads per month
7KB
62 lines
numeric-enum-macro
A declarative macro for type-safe enum-to-numbers conversion. no-std
supported!
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));
License: MIT/Apache-2.0
lib.rs
:
A declarative macro for type-safe enum-to-numbers conversion. no-std
supported!
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));