diff options
Diffstat (limited to 'third_party/rust/derive_more-impl/src/mul_helpers.rs')
-rw-r--r-- | third_party/rust/derive_more-impl/src/mul_helpers.rs | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/third_party/rust/derive_more-impl/src/mul_helpers.rs b/third_party/rust/derive_more-impl/src/mul_helpers.rs new file mode 100644 index 0000000000..dbc1c6257c --- /dev/null +++ b/third_party/rust/derive_more-impl/src/mul_helpers.rs @@ -0,0 +1,36 @@ +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) +} |