#[derive(EnumStr)]
{
// Attributes available to this derive:
#[enum_str]
}
Expand description
Generate string conversion for an enum.
Supports unit enums by default. Use #[enum_str(default)] for non-unit enums.
This macro generates inherent items and impls on the enum:
const fn as_name(&self) -> &'static strconst fn as_aliases(&self) -> &'static [&'static str]const ALL_NAMES: [&'static str; N]const ALL_ALIASES: [&'static str; M]impl From<T> for &'static strimpl AsRef<str> for Timpl Display for Timpl FromStr for Timpl TryFrom<&str> for T- Error struct for invalid conversion from str
§Container attributes
#[enum_str(rename_all = "snake_case")]: rename all variants by rule#[enum_str(alias_all = "lowercase")]: add aliases to all variants by rule (repeatable)#[enum_str(default)]: fills non-unit variant’s fields with default value during parsing#[enum_str(no_rendering)]: skipas_name,as_aliases,ALL_NAMES,ALL_ALIASES,From,AsRef,Display#[enum_str(no_parsing)]: skipFromStr,TryFrom, and the error struct#[enum_str(as_name(name = ..., vis = "...", enable/disable))]: control theas_namemethod#[enum_str(as_aliases(...))]: control theas_aliasesmethod#[enum_str(all_names(...))]: control theALL_NAMESconstant#[enum_str(all_aliases(...))]: control theALL_ALIASESconstant#[enum_str(impl_into_static_str(enable/disable))]: controlimpl From<T> for &'static str#[enum_str(impl_as_ref_str(enable/disable))]: controlimpl AsRef<str> for T#[enum_str(impl_display(enable/disable))]: controlimpl std::fmt::Display for T#[enum_str(impl_from_str(enable/disable))]: controlimpl FromStr for T#[enum_str(impl_try_from_str(enable/disable))]: controlimpl TryFrom<&str> for T#[enum_str(error(name = ..., vis = "...", enable/disable))]: control the error struct (default nameInvalid{Enum})#[enum_str(error_msg = "...")]: custom error message template
§Variant attributes
#[enum_str(rename = "custom_name")]: override the variant’s name#[enum_str(alias = "alt")]: add an alias (repeatable)#[enum_str(skip)]: skip variant from parsing andALL_NAMES/ALL_ALIASES
§Available rename rules
lowercaseUPPERCASEPascalCasecamelCasesnake_caseSCREAMING_SNAKE_CASEkebab-caseSCREAMING-KEBAB-CASE
§Available error message template variables
{name}: the enum’s type name{input}: the invalid input string (requires allocation){names}: all variant primary names{aliases}: all names and aliases
List variables accept format modifiers:
{names}: default, comma-separated, double-quoted:"Bar", "Baz"{names:|}: custom separator, no quotes:Bar|Baz{names: - :'}: custom separator and quote char:'Bar' - 'Baz'
Use {{ and }} for literal braces. : cannot be used as a separator or quote character.
§Example
use enum_helper::EnumStr;
#[derive(EnumStr, Debug, PartialEq, Eq)]
#[enum_str(rename_all = "lowercase")]
pub enum Foo {
Bar,
#[enum_str(alias = "bazzz")]
Baz,
}
assert_eq!(Foo::Bar.as_name(), "bar");
assert_eq!("bazzz".parse::<Foo>().unwrap(), Foo::Baz);