Derive Macro strum_macros::AsRefStr

source ·
#[derive(AsRefStr)]
{
    // Attributes available to this derive:
    #[strum]
}
Expand description

Converts enum variants to &'static str.

Implements AsRef<str> on your enum using the same rules as Display for determining what string is returned. The difference is that as_ref() returns a &str instead of a String so you don’t allocate any additional memory with each call.

// You need to bring the AsRef trait into scope to use it
use std::convert::AsRef;
use strum_macros::AsRefStr;

#[derive(AsRefStr, Debug)]
enum Color {
    #[strum(serialize = "redred")]
    Red,
    Green {
        range: usize,
    },
    Blue(usize),
    Yellow,
}

// uses the serialize string for Display
let red = Color::Red;
assert_eq!("redred", red.as_ref());
// by default the variants Name
let yellow = Color::Yellow;
assert_eq!("Yellow", yellow.as_ref());
// or for string formatting
println!(
    "blue: {} green: {}",
    Color::Blue(10).as_ref(),
    Color::Green { range: 42 }.as_ref()
);