Macro exemplar::sql_enum

source ·
macro_rules! sql_enum {
    ($(#[$enum_doc:meta])* Name => $name:ident, Type => $disc:ty, $($(#[$variant_doc:meta])* $vname:ident),* $(,)?) => { ... };
    ($(#[$enum_doc:meta])* Name => $name:ident, $($(#[$variant_doc:meta])* $vname:ident),* $(,)?) => { ... };
}
Expand description

Generate an SQL-compatible field-less enum.

SQL compatible means:

(Additionally, the standard constellation of Debug/Clone/Copy/Eq/Hash are derived.)

An enum generated by this macro can be used in any Model implementor.

Usage

sql_enum! {
    Name => Color,
    Red,
    Green,
    Blue,
};

By default, #[repr(i64)] is used. The optional Type parameter can override this:

sql_enum! {
    Name => Color,
    Type => u8,
    Red,
    Green,
    Blue,
};

Notes

Explicit discriminants are not supported. Variants will always be implicitly numbered, in order of definition, from zero.

Concretely, this means that:

sql_enum! {
    Name => Color,
    Red = 1,
    Green = 2,
    Blue = 3
}

…will not compile.


Doc comments (and other attributes, like derives) are supported:

sql_enum! {
    #[derive(Default)]
    /// An RGB color tag.
    Name => Color,
    /// Red
    #[default]
    Red,
    /// Green
    Green,
    /// Blue
    Blue,
}