#enums #literals #convert #traits #try #back #into-literal

macro literal-enum

Convert an [enum] to a [literal], and try to convert it back

7 releases

0.1.6 Sep 1, 2024
0.1.5 Sep 6, 2023
0.1.2 Jul 16, 2023

#1812 in Procedural macros

Download history 9/week @ 2024-06-10 18/week @ 2024-06-17 10/week @ 2024-06-24 13/week @ 2024-07-15 7/week @ 2024-07-22 10/week @ 2024-07-29 13/week @ 2024-08-05 8/week @ 2024-08-12 123/week @ 2024-08-26 42/week @ 2024-09-02 19/week @ 2024-09-16 54/week @ 2024-09-23

230 downloads per month
Used in 4 crates (via dnspod-lib)

MIT license

10KB
150 lines

literal-enum

Automatically implements the TryFrom<Literal> trait and Into<Literal> trait for an enum where the literals must be the same type(one of [&'static str, &'static [u8], u8, char, u32, bool])

If you need to convert other interger type(i8, i16, u16, i32, i64, u64, i128, u128), you can use intype-enum

Usage Example

use literal_enum::LiteralEnum;

#[derive(LiteralEnum)]
#[derive(Debug, PartialEq, Eq, PartialOrd, Ord)]
enum Command {
    /// increment pointer
    #[lit = b'>']
    IncrementPointer,
    /// decrement pointer
    #[lit = b'<']
    DecrementPointer,
}

assert_eq!(Command::try_from(b'>').unwrap(), Command::IncrementPointer);
let b: u8 = Command::IncrementPointer.into();
assert_eq!(b, b'>');
use literal_enum::LiteralEnum;

#[derive(LiteralEnum)]
enum E {
    A,
    AAAA,
}

let s: &'static str = E::A.into();
assert_eq!(s, "A");

Dependencies

~260–700KB
~17K SLoC