1 use crate::utils::{add_where_clauses_for_new_ident, MultiFieldData, RefType};
2 use proc_macro2::TokenStream;
3 use quote::quote;
4 use syn::{Generics, Ident};
5 
generics_and_exprs( multi_field_data: MultiFieldData, scalar_ident: &Ident, type_where_clauses: TokenStream, ref_type: RefType, ) -> (Generics, Vec<TokenStream>)6 pub fn generics_and_exprs(
7     multi_field_data: MultiFieldData,
8     scalar_ident: &Ident,
9     type_where_clauses: TokenStream,
10     ref_type: RefType,
11 ) -> (Generics, Vec<TokenStream>) {
12     let MultiFieldData {
13         fields,
14         casted_traits,
15         members,
16         method_ident,
17         ..
18     } = multi_field_data;
19     let reference = ref_type.reference();
20     let exprs: Vec<_> = casted_traits
21         .iter()
22         .zip(members)
23         .map(
24             |(casted_trait, member)| quote!(#casted_trait::#method_ident(#reference #member, rhs)),
25         )
26         .collect();
27 
28     let new_generics = add_where_clauses_for_new_ident(
29         &multi_field_data.state.input.generics,
30         &fields,
31         scalar_ident,
32         type_where_clauses,
33         true,
34     );
35     (new_generics, exprs)
36 }
37