【发布时间】:2022-12-08 02:43:25
【问题描述】:
我正在使用 syn 构建宏解析器,需要检查 ParseStream 是否是多个 keywords 之一。该代码目前看起来类似于:
mod kw {
syn::custom_keyword!(a);
syn::custom_keyword!(b);
syn::custom_keyword!(c);
}
enum MyKeywordEnum {
A(kw::a),
B(kw::b),
C(kw::c),
}
impl syn::parse::Parse for MyKeywordEnum {
fn parse(input: syn::parse::ParseStream) -> syn::Result<Self> {
Ok(if let Ok(ret) = input.parse::<kw::a>() {
Self::A(ret)
} else if let Ok(ret) = input.parse::<kw::b>() {
Self::B(ret)
} else if let Ok(ret) = input.parse::<kw::c>() {
Self::C(ret)
} else {
abort!(input.span(), "Couldn't parse primitive type"); // Via #[proc_macro_error]
})
}
}
- 如果表达式是
Option::Some或Result::Ok,是否有内置运算符或宏立即返回? - 有没有更好的方法来组织这些检查?
- 因为
ParseStream::parse静态编译为特定的impl Parse类型,我不能使用match,对吧?
【问题讨论】:
标签: rust rust-proc-macros