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:
#[repr(i*/u*)]
- Implements
TryFrom<i64>
. - Implements
ToSql
andFromSql
.
(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,
}