如何实现枚举的quote :: ToTokens?

维克托·波列沃(Victor Polevoy)

我正在实现一个程序宏,我需要向外部提供自己的结构。我需要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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章