Получается распарсить значения, но как вывести тип получаемого значения метода flat - не понимаю.
fn impl_flat_macro(ast: &syn::DeriveInput) -> TokenStream {
let data = if let syn::Data::Struct(data) = &ast.data {
data
} else {
unimplemented!();
};
let mut flat_values = vec![];
for field in data.fields.iter() {
let name = &field.ident;
flat_values.push(quote!(self.#name.clone()));
}
let name = &ast.ident;
let gen = quote! {
impl #name{
fn flat(self) -> (u32, String) {
return (#(#flat_values,)*)
}
}
};
gen.into()
}
Кто нибудь сталкивался с похожей задачей?
Так же как ты имя поля достаёшь, доставай тип.
тип можно сконструировать, пройдясь во всем типам структуры struct циклом, и подставив в quote с разделителем запятой
Обсуждают сегодня