[−][src]Module strum::additional_attributes
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 theToStringderivation, 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&stri.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
defaulton your enum. -
disabled: removes variant from generated code. -
message="..": Adds a message to enum variant. This is used in conjunction with theEnumMessagetrait to associate a message with a variant. Ifdetailed_messageis not provided, thenmessagewill also be returned when get_detailed_message() is called. -
detailed_message="..": Adds a more detailed message to a variant. If this value is omitted, thenmessagewill be used in it's place. -
props(key="value"): Enables associating additional information with a given variant.