我syn
用来解析 Rust 代码。当我使用 读取命名字段的类型field.ty
时,我得到一个syn::Type
. 当我使用打印它时,quote!{#ty}.to_string()
我得到"Option<String>"
.
我怎样才能得到公正"String"
?我想使用#ty
inquote!
来打印"String"
而不是"Option<String>"
.
我想生成如下代码:
impl Foo {
pub set_bar(&mut self, v: String) {
self.bar = Some(v);
}
}
从...开始
struct Foo {
bar: Option<String>
}
我的尝试:
let ast: DeriveInput = parse_macro_input!(input as DeriveInput);
let data: Data = ast.data;
match data {
Data::Struct(ref data) => match data.fields {
Fields::Named(ref fields) => {
fields.named.iter().for_each(|field| {
let name = &field.ident.clone().unwrap();
let ty = &field.ty;
quote!{
impl Foo {
pub set_bar(&mut self, v: #ty) {
self.bar = Some(v);
}
}
};
});
}
_ => {}
},
_ => panic!("You can derive it only from struct"),
}