Skip to main content

radiate_engines/steps/
mod.rs

1pub mod evaluate;
2pub mod filter;
3pub mod front;
4pub mod metric;
5pub mod recombine;
6pub mod speciate;
7
8pub use evaluate::*;
9pub use filter::*;
10pub use front::*;
11pub use metric::*;
12
13use radiate_core::{Chromosome, Ecosystem, MetricSet};
14use radiate_error::Result;
15
16use radiate_utils::ToSnakeCase;
17pub use recombine::*;
18pub use speciate::*;
19
20pub trait EngineStep<C>: Send + Sync
21where
22    C: Chromosome,
23{
24    fn name(&self) -> &'static str {
25        let name = std::any::type_name::<Self>()
26            .split("<")
27            .next()
28            .unwrap_or(std::any::type_name::<Self>())
29            .split("::")
30            .last()
31            .unwrap_or("Unknown Step");
32
33        let snake_case = name.to_snake_case();
34
35        let mut parts = snake_case
36            .split('_')
37            .filter(|part| !part.is_empty() && !part.contains("step"))
38            .collect::<Vec<_>>();
39
40        parts.insert(0, "step");
41        let result = parts.join(".");
42
43        radiate_utils::intern!(result)
44    }
45
46    fn execute(
47        &mut self,
48        generation: usize,
49        ecosystem: &mut Ecosystem<C>,
50        metrics: &mut MetricSet,
51    ) -> Result<()>;
52}