[][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);
}