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