use crate::error::GaError;
use crate::traits::LinearChromosome;
use std::borrow::Cow;
pub fn rejuvenate<U: LinearChromosome>(parent_1: &U, parent_2: &U) -> Result<Vec<U>, GaError> {
if parent_1.dna().len() != parent_2.dna().len() {
return Err(GaError::CrossoverError(format!(
"Parents must have the same DNA length. Parent 1: {}, Parent 2: {}",
parent_1.dna().len(),
parent_2.dna().len()
)));
}
crate::log_debug!(target="crossover_events", method="rejuvenate"; "Starting rejuvenate crossover");
let mut child_1 = U::new();
let mut child_2 = U::new();
child_1.set_dna(Cow::Borrowed(parent_1.dna()));
child_2.set_dna(Cow::Borrowed(parent_2.dna()));
crate::log_debug!(target="crossover_events", method="rejuvenate"; "Rejuvenate crossover finished");
Ok(vec![child_1, child_2])
}