in starlark_derive/src/trace.rs [78:121]
fn trace_struct(data: &DataStruct) -> TokenStream {
match data.fields {
Fields::Named(ref fields) => {
let xs: Vec<_> = fields
.named
.iter()
.filter_map(|f| {
if !is_ignore(&f.attrs) {
let name = &f.ident;
Some(quote_spanned! {f.span() =>
starlark::values::Trace::trace(&mut self.#name, tracer);
})
} else {
None
}
})
.collect();
quote! {
#(#xs)*
}
}
Fields::Unnamed(ref fields) => {
let xs: Vec<_> = fields
.unnamed
.iter()
.enumerate()
.filter_map(|(i, f)| {
if !is_ignore(&f.attrs) {
let i = syn::Index::from(i);
Some(quote_spanned! {f.span() => starlark::values::Trace::trace(&mut self.#i, tracer);})
} else {
None
}
})
.collect();
quote! {
#(#xs)*
}
}
Fields::Unit => {
quote!()
}
}
}