MCPcopy Create free account
hub / github.com/carllerche/assert-struct / expand_enum_assertion

Function expand_enum_assertion

assert-struct-macros/src/expand.rs:444–479  ·  view source on GitHub ↗

Generate assertion for enum tuple variants with error collection

(value_expr: &TokenStream, pattern: &PatternEnum)

Source from the content-addressed store, hash-verified

442
443/// Generate assertion for enum tuple variants with error collection
444fn expand_enum_assertion(value_expr: &TokenStream, pattern: &PatternEnum) -> TokenStream {
445 let variant_path = &pattern.path;
446 let elements = &pattern.elements;
447 let span = variant_path.span();
448
449 let error_push = generate_error_push(
450 span,
451 quote!(format!("{:?}", #value_expr)),
452 quote!(None),
453 pattern.node_id,
454 );
455
456 // Special handling for unit variants (empty elements)
457 if elements.is_empty() {
458 quote_spanned! {span=>
459 if !matches!(#value_expr, #variant_path) {
460 #error_push
461 }
462 }
463 } else {
464 // Use helper to process elements with appropriate path
465 let (match_patterns, element_assertions) = process_tuple_elements(elements, "__elem_");
466
467 quote_spanned! {span=>
468 #[allow(unreachable_patterns)]
469 match &#value_expr {
470 #variant_path(#(#match_patterns),*) => {
471 #(#element_assertions)*
472 },
473 _ => {
474 #error_push
475 }
476 }
477 }
478 }
479}
480
481/// Generate range assertion with error collection
482fn expand_range_assertion(value_expr: &TokenStream, pattern: &PatternRange) -> TokenStream {

Callers 1

expand_pattern_assertionFunction · 0.85

Calls 4

generate_error_pushFunction · 0.85
process_tuple_elementsFunction · 0.85
is_emptyMethod · 0.80
spanMethod · 0.45

Tested by

no test coverage detected