我正在尝试创建一个派生宏,它在与Struct一起使用时会编译,而在与任何其他类型一起使用时会崩溃。
但是-我不确定如何匹配派生块中的类型。
怎么做才合适呢?这算不算惯用法?或者有更简单的方法来做这件事吗?
use proc_macro::TokenStream;
use quote::quote;
use syn;
#[proc_macro_derive(MyCustomMacro)]
pub fn my_custom_macro_derive(input: TokenStream) -> TokenStream {
// parse TokenStream into syntax tree
let ast = syn::parse(input).unwrap();
// implement macro
match ast.Type.to_string() {
"Struct" => {
impl_my_custom_macro(&ast)
},
_ => {
panic!("Can only be used with Structs.");
}
}
}
fn impl_my_custom_macro(ast: &syn::DeriveInput) -> TokenStream {
// snip...
}
1条答案
按热度按时间wqsoz72f1#
使用DeriveInput.data: