如何处理生锈的枚举价值?

问题描述 投票:0回答:0
我为害虫写了一些代码来追踪其解析过程。 我正在尝试最终确定UI以访问跟踪。 在我看来,我想要的就是这样:

#[derive(Parser)] #[grammar = "camxes.pest"] #[tracing = "Indented"]
(当前版本只有前两行)。  我对各种跟踪选项有一个简单的枚举; 

TracingType::Indented

是一个值。
我已经成功阅读了该属性,并且可以将字符串转换(应该像我上面显示的字符串吗?这是通过修改代码周围的代码来完成

我想做的下一步是在

https://github.com/pest-parser/pest/blob/master/master/generator/src/generator.rs#l86上修改生成宏内的函数调用。作为一个论点,我失败了。 我真的不太了解Rust Macros。我希望这是一个简单的更改(“拿一个我已经拥有的值,并将其添加到代码中的一个已知位置”)这很容易,但是没有运气。

如果我做明显的事情,然后改变:

::pest::state(input, |state| { match rule { #patterns } })

to

::pest::state(input, #tracing, |state| { match rule { #patterns } })

,其中
tracing
是一个具有

TracingType

值的变量,我得到
the trait bound 
PEST:: TracingType:Quote ::Totokens

is not satisfied

.
我以为为简单的枚举编写totokens inmp,但我还没有能够使任何工作。  我从
如何实现Quote :: Totokens进行枚举?
,但显然已经过时了。
我试图寻找类似的totokens实现的示例。方法。 我一直以各种方式与
quote::format_ident!
一起玩,但没有任何工作。

一个朋友问克劳德(Claude impl quote::ToTokens for TracingType { fn to_tokens(&self, tokens: &mut TokenStream) { let path: TokenStream = match self { TracingType::Indented => quote!(::pest::TracingType::Indented), TracingType::None => quote!(::pest::TracingType::None), TracingType::PegViz => quote!(::pest::TracingType::PegViz), }; tokens.extend(iter: path); } }

对我来说,这并不显而易见!在那儿工作,但首先不在枚举价值上工作,但我认为我得到了其余的。

rust rust-macros pest
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.