fn trace_struct()

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!()
        }
    }
}