[−][src]Attribute Macro named_constants::named_constants
#[named_constants]
Named constants
Makes enums behave like named constants in languages like C/C++ or C#.
Put this attribute on an enum and it will be rewritten as a newtype struct. The enum variants are turned into associated constants.
Examples
use named_constants::named_constants; #[named_constants] // Derives are applied to the newtype wrapper #[derive(Copy, Clone, Debug, Eq, PartialEq)] // Required repr to specify the underlying type #[repr(i32)] pub enum CardSuit { CLUBS, // (= 0) Starts from zero DIAMONDS, // (= 1) Autoincrements the previous value HEARTS = 4, // (= 4) Direct assignment SPADES, // (= 5) Autoincrements the previous value } let clubs = CardSuit::CLUBS; let weird = CardSuit(14); // Legal!
Implementation notes
In the example above, CardSuit
is transformed into:
#[derive(Copy, Clone, Debug, Eq, PartialEq)] #[repr(transparent)] pub struct CardSuit(pub i32); impl CardSuit { pub const CLUBS: CardSuit = CardSuit(0); pub const DIAMONDS: CardSuit = CardSuit(1); pub const HEARTS: CardSuit = CardSuit(4); pub const SPADES: CardSuit = CardSuit(4 + 1); }