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

macro literal-enum

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

6 releases

0.1.5 Sep 6, 2023
0.1.4 Sep 4, 2023
0.1.2 Jul 16, 2023

#1816 in Procedural macros

Download history 4/week @ 2024-02-12 22/week @ 2024-02-19 22/week @ 2024-02-26 9/week @ 2024-03-04 23/week @ 2024-03-11 16/week @ 2024-03-18 13/week @ 2024-03-25 129/week @ 2024-04-01

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

MIT license

8KB
121 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'>');
#[derive(LiteralEnum)]
enum E {
    A,
    AAAA,
}

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

Dependencies

~335–790KB
~19K SLoC