【发布时间】:2019-02-21 08:02:57
【问题描述】:
下面是syn::parse的mod文档给出的example。
enum Item {
Struct(ItemStruct),
Enum(ItemEnum),
}
struct ItemStruct {
struct_token: Token![struct],
ident: Ident,
brace_token: token::Brace,
fields: Punctuated<Field, Token![,]>,
}
impl Parse for Item {
fn parse(input: ParseStream) -> Result<Self> {
let lookahead = input.lookahead1();
if lookahead.peek(Token![struct]) {
input.parse().map(Item::Struct) // <-- here
} else if lookahead.peek(Token![enum]) {
input.parse().map(Item::Enum) // <-- and here
} else {
Err(lookahead.error())
}
}
}
input.parse().map(Item::Struct) 是有效的正常 Rust 语法(似乎不是 Item::Struct 不是函数),还是 proc_macro 库的一种特殊语法?如果是后者,是否有proc_macro具体语法规则的文档?
【问题讨论】:
标签: rust rust-proc-macros