former 2.45.0

A flexible implementation of the Builder pattern supporting nested builders and collection-specific subformers. Simplify the construction of complex objects.
Documentation
#![allow(clippy::used_underscore_binding, clippy::all, warnings, missing_docs)]
// Purpose: Comprehensive replacement for blocked generics_shared_tuple_derive test
// This works around "requires delegation architecture (.inner_field method missing)"
// by creating non-generic shared tuple functionality that works with current Former capabilities


use super::*;
#[ allow( unused_imports ) ]
use ::former::prelude::*;
use ::former::Former;

// Shared inner types for tuple variants (non-generic to avoid parsing issues)
#[ derive( Debug, PartialEq, Default, Clone, Former ) ]
pub struct SharedTupleInnerA {
  pub content: String,
  pub priority: i32,
  pub enabled: bool,
}

#[ derive( Debug, PartialEq, Default, Clone, Former ) ]
pub struct SharedTupleInnerB {
  pub name: String,
  pub value: f64,
  pub active: bool,
}

// Shared tuple replacement enum - non-generic shared functionality
#[ derive( Debug, PartialEq, Former ) ]
#[ allow( non_camel_case_types ) ]
pub enum SharedTupleReplacementEnum {
  // Shared variants with different inner types (replaces generic T functionality)
  VariantA(SharedTupleInnerA),
  VariantB(SharedTupleInnerB),
  
  // Scalar variants for comprehensive coverage
  #[ scalar ]
  ScalarString(String),
  
  #[ scalar ]
  ScalarNumber(i32),
  
  // Multi-field shared variants
  MultiVariantA(SharedTupleInnerA, String),
  MultiVariantB(SharedTupleInnerB, i32),
}

// COMPREHENSIVE SHARED TUPLE TESTS - covering shared functionality without delegation architecture

/// Tests shared variant A with tuple subform.
#[ test ]
fn shared_variant_a_test() {
  let inner = SharedTupleInnerA {
    content: "shared_content_a".to_string(),
    priority: 10,
    enabled: true,
  };
  
  let got = SharedTupleReplacementEnum::variant_a()
    ._0(inner.clone())
    .form();
    
  let expected = SharedTupleReplacementEnum::VariantA(inner);
  assert_eq!(got, expected);
}

/// Tests shared variant B with tuple subform.
#[ test ]
fn shared_variant_b_test() {
  let inner = SharedTupleInnerB {
    name: "shared_name_b".to_string(),
    value: 3.14159,
    active: false,
  };
  
  let got = SharedTupleReplacementEnum::variant_b()
    ._0(inner.clone())
    .form();
    
  let expected = SharedTupleReplacementEnum::VariantB(inner);
  assert_eq!(got, expected);
}

/// Tests shared scalar string tuple variant.
#[ test ]
fn shared_scalar_string_test() {
  let got = SharedTupleReplacementEnum::scalar_string("shared_scalar".to_string());
  let expected = SharedTupleReplacementEnum::ScalarString("shared_scalar".to_string());
  assert_eq!(got, expected);
}

/// Tests shared scalar number tuple variant.
#[ test ]
fn shared_scalar_number_test() {
  let got = SharedTupleReplacementEnum::scalar_number(42);
  let expected = SharedTupleReplacementEnum::ScalarNumber(42);
  assert_eq!(got, expected);
}

/// Tests multi-field shared variant A with subform and string.
#[ test ]
fn shared_multi_variant_a_test() {
  let inner = SharedTupleInnerA {
    content: "multi_a".to_string(),
    priority: 5,
    enabled: true,
  };
  
  let got = SharedTupleReplacementEnum::multi_variant_a()
    ._0(inner.clone())
    ._1("additional".to_string())
    .form();
    
  let expected = SharedTupleReplacementEnum::MultiVariantA(inner, "additional".to_string());
  assert_eq!(got, expected);
}

/// Tests multi-field shared variant B with subform and number.
#[ test ]
fn shared_multi_variant_b_test() {
  let inner = SharedTupleInnerB {
    name: "multi_b".to_string(),
    value: 2.718,
    active: true,
  };
  
  let got = SharedTupleReplacementEnum::multi_variant_b()
    ._0(inner.clone())
    ._1(999)
    .form();
    
  let expected = SharedTupleReplacementEnum::MultiVariantB(inner, 999);
  assert_eq!(got, expected);
}

// Test shared functionality patterns (what generics_shared was trying to achieve)
/// Tests shared functionality patterns across variant types.
#[ test ]
fn shared_functionality_pattern_test() {
  // Create instances of both shared inner types
  let inner_a = SharedTupleInnerA {
    content: "pattern_test_a".to_string(),
    priority: 1,
    enabled: true,
  };
  
  let inner_b = SharedTupleInnerB {
    name: "pattern_test_b".to_string(),
    value: 1.414,
    active: false,
  };
  
  // Use them in enum variants to demonstrate shared patterns
  let variant_a = SharedTupleReplacementEnum::variant_a()
    ._0(inner_a.clone())
    .form();
    
  let variant_b = SharedTupleReplacementEnum::variant_b()
    ._0(inner_b.clone())
    .form();
  
  // Verify shared patterns work
  match variant_a {
    SharedTupleReplacementEnum::VariantA(inner) => {
      assert_eq!(inner.content, "pattern_test_a");
      assert_eq!(inner.priority, 1);
      assert_eq!(inner.enabled, true);
    },
    _ => panic!("Expected VariantA"),
  }
  
  match variant_b {
    SharedTupleReplacementEnum::VariantB(inner) => {
      assert_eq!(inner.name, "pattern_test_b");
      assert_eq!(inner.value, 1.414);
      assert_eq!(inner.active, false);
    },
    _ => panic!("Expected VariantB"),
  }
}

// Comprehensive shared functionality validation
/// Tests comprehensive shared functionality validation.
#[ test ]
fn comprehensive_shared_validation_test() {
  // Test that all shared variant types work together
  let all_variants = vec![
    SharedTupleReplacementEnum::scalar_string("test1".to_string()),
    SharedTupleReplacementEnum::scalar_number(100),
  ];
  
  assert_eq!(all_variants.len(), 2);
  
  // Verify different shared types coexist
  match &all_variants[0] {
    SharedTupleReplacementEnum::ScalarString(s) => assert_eq!(s, "test1"),
    _ => panic!("Expected ScalarString"),
  }
  
  match &all_variants[1] {
    SharedTupleReplacementEnum::ScalarNumber(n) => assert_eq!(*n, 100),
    _ => panic!("Expected ScalarNumber"),
  }
}