#macro-derive #enums #string #derive #string-conversion #macro

macro enum_stringify

Macro to generate string conversion functions for enums

11 unstable releases (5 breaking)

0.6.3 Mar 13, 2025
0.6.1 Dec 2, 2024
0.6.0 Oct 29, 2024
0.5.0 Jun 14, 2024
0.3.0 Oct 13, 2023

#273 in Procedural macros

Download history 439/week @ 2024-12-01 506/week @ 2024-12-08 743/week @ 2024-12-15 217/week @ 2024-12-22 587/week @ 2024-12-29 710/week @ 2025-01-05 916/week @ 2025-01-12 872/week @ 2025-01-19 1285/week @ 2025-01-26 1657/week @ 2025-02-02 701/week @ 2025-02-09 261/week @ 2025-02-16 398/week @ 2025-02-23 672/week @ 2025-03-02 841/week @ 2025-03-09 473/week @ 2025-03-16

2,401 downloads per month
Used in 3 crates

MIT/Apache

22KB
277 lines

enum-stringify

Set of macros (only one for now) to generate a string representation of an enum. When using #[derive(EnumStringify)] on an enum, it will implement std::fmt::Display, TryFrom<&str>, TryFrom<String> and std::str::FromStr for it. It will use the name of the enum variant as the string representation.

Usage

use enum_stringify::EnumStringify;

#[derive(EnumStringify)]
enum MyEnum {
    Variant1,
    Variant2,
    Variant3,
}

fn main() {
    println!("{}", MyEnum::Variant1); // Prints "Variant1"
    assert_eq!(MyEnum::Variant1.to_string(), "Variant1");
    assert_eq!(MyEnum::try_from("Variant2").unwrap(), MyEnum::Variant2);
    assert_eq!(MyEnum::try_from("Variant3".to_string()).unwrap(), MyEnum::Variant3);
    assert_eq!(MyEnum::from_str("Variant1").unwrap(), MyEnum::Variant1);
}

Custom string representation

You can customize the string representation of the enum by adding prefixes or/and suffixes to the variants and also changing the case of the string representation.

use enum_stringify::EnumStringify;

#[derive(EnumStringify)]
#[enum_stringify(prefix = "MyPrefix", suffix = "MySuffix", case = "upper_flat")]
enum MyEnum {
    Variant1,
    Variant2,
    Variant3,
}

In this case the string representation of MyEnum::Variant1 will be MyPrefixVariant1MySuffix(and so on for the other variants).

Documentation and installation

See docs.rs for documentation. It is available on crates.io as well.

Dependencies

~0.6–1.1MB
~21K SLoC