我正在实现一个过程宏,我需要向外部提供自己的结构。我需要为我的结构实现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
example没有解释这一点。
答案 0 :(得分:2)
我认为你正在寻找类似的东西:
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 }