我正在实现一个程序宏,我需要向外部提供自己的结构。我需要quote::ToTokens
为我的结构实现特征,但是我不知道如何实现。我尝试过此代码,但未成功。该代码是可编译的,但无效:
#[derive(Debug, Serialize, Clone)]
pub enum Enum {
A,
B,
}
impl quote::ToTokens for Enum {
fn to_tokens(&self, tokens: &mut quote::Tokens) {
tokens.append("Enum::B");
}
}
该quote::ToTokens
示例没有对此进行解释。
我认为您正在寻找类似的东西:
impl quote::ToTokens for Enum {
fn to_tokens(&self, tokens: &mut quote::Tokens) {
tokens.append("Enum");
tokens.append("::");
match *self {
Enum::A => tokens.append("A"),
Enum::B => tokens.append("B")
}
}
}
如果您担心枚举的导入方式,则应重新导入以确保它不与其他任何冲突:
impl quote::ToTokens for Enum {
fn to_tokens(&self, tokens: &mut quote::Tokens) {
tokens.append("{");
tokens.append("use");
tokens.append_separated(&["module_name", "Enum"], "::");
tokens.append(";");
tokens.append("Enum");
tokens.append("::");
match *self {
Enum::A => tokens.append("A"),
Enum::B => tokens.append("B")
}
tokens.append("}");
}
}
会产生:
{ use module_name::Enum; Enum::A }
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句