我在 Rust 的派生宏中做了以下尝试:
extern crate proc_macro;
use crate::proc_macro::TokenStream;
use quote::quote;
use syn;
#[proc_macro_derive(DeserializeConfigurable)]
pub fn deserialize_configurable_derive(input: TokenStream) -> TokenStream {
let ast: syn::DeriveInput = syn::parse(input).unwrap();
let name = &ast.ident;
let gen = quote! {
impl<'de> Deserialize<'de> for #name {
fn deserialize<D>(deserializer: D) -> Result<#name, D::Error>
where
D: Deserializer<'de>,
{
let config = <#name as Configurable>::Config::deserialize(deserializer)?;
Ok(#name::from_config(config))
}
}
};
gen.into()
}
目标是deserialize
基于另一个特征为Configurable
.
但是,编译器对我的报价声明有以下抱怨:
扩展宏时达到递归限制
stringify
我在这里看不到递归。我什至没有使用stringify
!什么叫什么在这里无限?