use crate::utils::{add_where_clauses_for_new_ident, MultiFieldData, RefType}; use proc_macro2::TokenStream; use quote::quote; use syn::{Generics, Ident}; pub fn generics_and_exprs( multi_field_data: MultiFieldData, scalar_ident: &Ident, type_where_clauses: TokenStream, ref_type: RefType, ) -> (Generics, Vec) { let MultiFieldData { fields, casted_traits, members, method_ident, .. } = multi_field_data; let reference = ref_type.reference(); let exprs: Vec<_> = casted_traits .iter() .zip(members) .map( |(casted_trait, member)| quote!(#casted_trait::#method_ident(#reference #member, rhs)), ) .collect(); let new_generics = add_where_clauses_for_new_ident( &multi_field_data.state.input.generics, &fields, scalar_ident, type_where_clauses, true, ); (new_generics, exprs) }