2个版本
0.1.1 | 2021年11月13日 |
---|---|
0.1.0 | 2021年11月12日 |
#82 in #关联
用于 2 个crate(通过 关联)
12KB
169 行
associated-derive
为关联类型提供的推导宏。
使用方法
将 #[derive(Associated)]
添加到枚举定义中。此宏与结构体或联合体不兼容。
在推导 Associated
时,必须在 #[derive(Associated)]
属性下包含一个 #[associate(Type = associated_type)]
属性,将 associated_type
替换为你想与枚举变体关联的常量类型。
对于枚举的每个变体,都必须包含一个 #[assoc(expr)]
或 #[assoc_const(const_expr)]
属性,将其放在变体之上或内联在变体之前,用 expr
或 const_expr
替换你想要关联的表达式或值。
示例
#[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"
生成实现
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",
}
}
}
注意
如果您为一个变体同时赋予了一个 #[assoc]
和一个 #[assoc_const]
属性,或者多个 #[assoc]
或 #[assoc_const]
属性,只有第一个会被考虑。目前包含多个属性并不是错误,但这种情况将会改变,因此每个变体只使用一个 #[assoc]
或 #[assoc_const]
属性。
有关检索关联常量的信息,请参阅 associated。
依赖项
~1.5MB
~35K SLoC