2 releases
0.1.1 | Nov 13, 2021 |
---|---|
0.1.0 | Nov 12, 2021 |
#82 in #associated
Used in 2 crates
(via associated)
12KB
169 lines
associated-derive
Derive macro for Associated
.
Usage
Add #[derive(Associated)]
to an enum definition. This is not compatible with structs or unions.
When deriving Associated
you must include a #[associate(Type = associated_type)]
attribute beneath
the #[derive(Associated)]
attribute, replacing associated_type
with the type of the constants you
want to associate with the enum variants.
For each and every variant of the enum you must include either a #[assoc(expr)]
or
#[assoc_const(const_expr)]
attribute above or inline before the variant, with expr
or const_expr
replaced with the expression or value you want to associate.
Example
#[derive(Associated)]
#[associated(Type = &'static str)]
enum Phonetic {
#[assoc_const("Alpha")] Alpha,
#[assoc(&"Bravo")] // #[assoc] requires an expression of type &'static Type
Bravo = 3 // supports explicit enum discriminants
// ...
}
Phonetic::Alpha.get_associated() // returns a static lifetime reference to "Alpha"
Generated Implementation
impl associated::Associated for Phonetic {
type AssociatedType = &'static str;
fn get_associated(&self) -> &'static Self::AssociatedType {
match self {
Phonetic::Alpha => {
const ASSOCIATED: &'static str = "Alpha";
&ASSOCIATED
},
Phonetic::Bravo => &"Bravo",
}
}
}
Note
If you give a variant both an #[assoc]
and an #[assoc_const]
attribute, or multiple #[assoc]
or #[assoc_const]
attributes, only the first will be considered. Including more than one is not
currently an error, but this will change so only use one #[assoc]
or #[assoc_const]
attribute per variant.
See associated for retrieving associated constants.
Dependencies
~1.5MB
~35K SLoC