#literals

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

#1479 in Procedural macros

30 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

~205–640KB
~15K SLoC