#nostd #enum #macros

numeric-enum-macro

A declarative macro for type-safe enum-to-numbers conversion

2 unstable releases

0.2.0 Mar 2, 2020
0.1.1 Feb 25, 2020
0.1.0 Feb 25, 2020

#737 in Rust patterns

Download history 2358/week @ 2022-05-31 2426/week @ 2022-06-07 1923/week @ 2022-06-14 1517/week @ 2022-06-21 2013/week @ 2022-06-28 1504/week @ 2022-07-05 1382/week @ 2022-07-12 2029/week @ 2022-07-19 1138/week @ 2022-07-26 910/week @ 2022-08-02 571/week @ 2022-08-09 1185/week @ 2022-08-16 738/week @ 2022-08-23 810/week @ 2022-08-30 1144/week @ 2022-09-06 1204/week @ 2022-09-13

4,014 downloads per month

MIT/Apache

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,
    }
}

# use ::core::convert::TryFrom;
// 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));

No runtime deps