in gazebo_derive/src/util.rs [27:58]
fn duplicate_struct(data: &DataStruct, duplicate: &TokenStream) -> TokenStream {
match data.fields {
Fields::Named(ref fields) => {
// Self {x: clone(self.x), y: clone(self.y)}
let xs = fields.named.iter().map(|f| {
let name = &f.ident;
quote_spanned! {f.span() =>
#name: #duplicate(&self.#name)
}
});
quote! {
Self { #(#xs, )* }
}
}
Fields::Unnamed(ref fields) => {
// Self(clone(self.0), clone(self.1))
let xs = fields.unnamed.iter().enumerate().map(|(i, f)| {
let index = Index::from(i);
quote_spanned! {f.span()=>
#duplicate(&self.#index)
}
});
quote! {
Self ( #(#xs, )* )
}
}
Fields::Unit => {
// Self
quote!(Self)
}
}
}