Module strum::additional_attributes [−][src]
Documentation for Additional Attributes
Strum supports several custom attributes to modify the generated code. At the enum level, the
#[strum(serialize_all = "snake_case")]
attribute can be used to change the case used when
serializing to and deserializing from strings:
use std::string::ToString; use strum; use strum_macros; #[derive(Debug, Eq, PartialEq, strum_macros::ToString)] #[strum(serialize_all = "snake_case")] enum Brightness { DarkBlack, Dim { glow: usize, }, #[strum(serialize = "bright")] BrightWhite, } assert_eq!( String::from("dark_black"), Brightness::DarkBlack.to_string().as_ref() ); assert_eq!( String::from("dim"), Brightness::Dim { glow: 0 }.to_string().as_ref() ); assert_eq!( String::from("bright"), Brightness::BrightWhite.to_string().as_ref() );
Custom attributes are applied to a variant by adding #[strum(parameter="value")]
to the variant.
-
serialize="..."
: Changes the text thatFromStr()
looks for when parsing a string. This attribute can be applied multiple times to an element and the enum variant will be parsed if any of them match. -
to_string="..."
: Similar toserialize
. This value will be included when usingFromStr()
. More importantly, this specifies what text to use when callingvariant.to_string()
with theToString
derivation, or when callingvariant.as_ref()
withAsRefStr
. -
default
: Applied to a single variant of an enum. The variant must be a Tuple-like variant with a single piece of data that can be create from a&str
i.e.T: From<&str>
. The generated code will now return the variant with the input string captured as shown below instead of failing.ⓘ// Replaces this: _ => Err(strum::ParseError::VariantNotFound) // With this in generated code: default => Ok(Variant(default.into()))
The plugin will fail if the data doesn’t implement From<&str>. You can only have one
default
on your enum. -
disabled
: removes variant from generated code. -
message=".."
: Adds a message to enum variant. This is used in conjunction with theEnumMessage
trait to associate a message with a variant. Ifdetailed_message
is not provided, thenmessage
will also be returned when get_detailed_message() is called. -
detailed_message=".."
: Adds a more detailed message to a variant. If this value is omitted, thenmessage
will be used in it’s place. -
props(key="value")
: Enables associating additional information with a given variant.