for variant in &data_enum.variants { let subtype = &variant.ident; let subtype = quote! { #input_type::#subtype };
match variant.fields {
Fields::Unnamed(ref fields) => { // The pattern that is outputted should look like this: // (Subtype(left_vars), TypePath(right_vars)) => Ok(TypePath(exprs)) let size = unnamed_to_vec(fields).len(); let l_vars = &numbered_vars(size, "l_"); let r_vars = &numbered_vars(size, "r_"); let method_iter = method_iter.by_ref(); let matcher = quote! {
(#subtype(#(#l_vars),*), #subtype(#(#r_vars),*)) => {
::core::result::Result::Ok(#subtype(#(#l_vars.#method_iter(#r_vars)),*))
}
};
matches.push(matcher);
}
Fields::Named(ref fields) => { // The pattern that is outputted should look like this: // (Subtype{a: __l_a, ...}, Subtype{a: __r_a, ...} => { // Ok(Subtype{a: __l_a.add(__r_a), ...}) // } let field_vec = named_to_vec(fields); let size = field_vec.len(); let field_names = &field_idents(&field_vec); let l_vars = &numbered_vars(size, "l_"); let r_vars = &numbered_vars(size, "r_"); let method_iter = method_iter.by_ref(); let matcher = quote! {
(#subtype{#(#field_names: #l_vars),*}, #subtype{#(#field_names: #r_vars),*}) => {
::core::result::Result::Ok(#subtype{#(#field_names: #l_vars.#method_iter(#r_vars)),*})
}
};
matches.push(matcher);
}
Fields::Unit => { let operation_name = method_ident.to_string();
matches.push(quote! {
(#subtype, #subtype) => ::core::result::Result::Err(
::derive_more::ops::BinaryError::Unit(
::derive_more::ops::UnitError::new(#operation_name)
)
)
});
}
}
}
if data_enum.variants.len() > 1 { // In the strange case where there's only one enum variant this is would be an unreachable // match. let operation_name = method_ident.to_string();
matches.push(quote! {
_ => ::core::result::Result::Err(::derive_more::ops::BinaryError::Mismatch(
::derive_more::ops::WrongVariantError::new(#operation_name)
))
});
}
quote! { match (self, rhs) { #(#matches),*
}
}
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet am 2026-06-23)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.