Crate enum_display

Crate enum_display 

Source
Expand description

enum-display is a crate for implementing core::fmt::Display on enum variants with macros.

This crate supports both std and no_std environments. In no_std mode, it works without allocation by writing directly to the formatter.

§Simple Example

use enum_display::EnumDisplay;

#[derive(EnumDisplay)]
enum Color {
   Red,
   Green,
   Blue,
}

assert_eq!(Color::Red.to_string(), "Red");
assert_eq!(Color::Green.to_string(), "Green");
assert_eq!(Color::Blue.to_string(), "Blue");

§Example With Custom Case Transform

Any case from convert_case is supported.

use enum_display::EnumDisplay;

#[derive(EnumDisplay)]
#[enum_display(case = "Kebab")]
enum Message {
    HelloGreeting { name: String },
}

assert_eq!(Message::HelloGreeting { name: "Alice".to_string() }.to_string(), "hello-greeting");

§No-std Usage

This crate works in no_std environments:

use enum_display::EnumDisplay;

#[derive(EnumDisplay)]
enum Status {
    Ready,

    #[display("Error: {code}")]
    Error { code: u32 },
}

§Example With Custom Variant Formatting

Display output can be customised using a format string passed to the display enum variant attribute.

The case-converted variant name is always available via the {variant} named parameter.

Additional parameters depend on the type of enum variant:

Variant TypeFormat String Field AccessExample
Named {…}Named Parameters"{variant} name field is: {name}"
Unnamed (…)Positional Parameters"{variant} age field is: {0}"
UnitNo additional fields available"{variant} has no fields"
use enum_display::EnumDisplay;

#[derive(EnumDisplay)]
enum Conversation {
    #[display("{variant} {name}!")]
    Hello { name: String },

    #[display("{variant}? {0}")]
    HowOld(usize),

    #[display("{variant}!")]
    Wow,
}

assert_eq!(Conversation::Hello { name: "Alice".to_string() }.to_string(), "Hello Alice!");
assert_eq!(Conversation::HowOld(123).to_string(), "HowOld? 123");
assert_eq!(Conversation::Wow.to_string(), "Wow!");

Derive Macros§

EnumDisplay