summaryrefslogtreecommitdiffstats
path: root/vendor/derive_more/src/mul_helpers.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/derive_more/src/mul_helpers.rs')
-rw-r--r--vendor/derive_more/src/mul_helpers.rs36
1 files changed, 36 insertions, 0 deletions
diff --git a/vendor/derive_more/src/mul_helpers.rs b/vendor/derive_more/src/mul_helpers.rs
new file mode 100644
index 000000000..985d64fe8
--- /dev/null
+++ b/vendor/derive_more/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)
+}