37 lines
969 B
Rust
37 lines
969 B
Rust
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<TokenStream>) {
|
|
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)
|
|
}
|