【发布时间】:2020-07-27 15:43:44
【问题描述】:
我正在试验 Rust 过程宏。
我希望能够创建一个用于生成 JNI 调用样板的宏。类似的东西
jni_method!{com.purplefrog.rust_callable.Widget, fn echo_str(&str)->String}
到目前为止,我有以下代码 (playground):
#[macro_use]
extern crate syn; // 1.0.33
use syn::parse::{Parse, ParseStream};
use syn::Signature;
struct Arguments {
name: proc_macro2::Ident,
signature: Signature,
}
impl Parse for Arguments {
fn parse(tokens: ParseStream) -> Result<Arguments, syn::Error> {
let name: proc_macro2::Ident = tokens.parse()?;
let comma: Token![,] = tokens.parse()?;
let signature: Signature = //tokens.parse()?;
syn::item::parsing::parse_signature(tokens)?;
Ok(Arguments {
name: name,
signature,
})
}
}
很遗憾,parse_signature 调用出错:
error[E0603]: module `item` is private
--> src/lib.rs:17:18
|
17 | syn::item::parsing::parse_signature(tokens)?;
| ^^^^ private module
|
note: the module `item` is defined here
--> /playground/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-1.0.33/src/lib.rs:363:1
|
363 | mod item;
| ^^^^^^^^^
从ParseStream 解析Signature 的正确方法是什么?
【问题讨论】:
标签: rust macros rust-proc-macros