1mod app;
2mod chart;
3mod runtime;
4mod state;
5mod styles;
6mod widgets;
7
8use crate::runtime::TuiEngine;
9use radiate_engines::{Chromosome, GeneticEngine, disable_logging};
10use std::time::Duration;
11
12pub const DEFAULT_RENDER_INTERVAL: Duration = Duration::from_millis(100);
13
14pub fn ui<C, T>(engine: impl Into<UiInput<C, T>>) -> TuiEngine<C, T>
15where
16 C: Chromosome + Clone + 'static,
17 T: Clone + Send + Sync,
18{
19 disable_logging();
20 let (engine, render_interval) = match engine.into() {
21 UiInput::Engine(e) => (e, DEFAULT_RENDER_INTERVAL),
22 UiInput::EngineRenderInterval(e, d) => (e, d),
23 };
24
25 TuiEngine::new(engine, render_interval)
26}
27
28pub enum UiInput<C, T>
29where
30 C: Chromosome,
31 T: Clone + Send + Sync + 'static,
32{
33 Engine(GeneticEngine<C, T>),
34 EngineRenderInterval(GeneticEngine<C, T>, Duration),
35}
36
37impl<C, T> From<GeneticEngine<C, T>> for UiInput<C, T>
38where
39 C: Chromosome,
40 T: Clone + Send + Sync,
41{
42 fn from(engine: GeneticEngine<C, T>) -> Self {
43 UiInput::Engine(engine)
44 }
45}
46
47impl<C, T> From<(GeneticEngine<C, T>, Duration)> for UiInput<C, T>
48where
49 C: Chromosome,
50 T: Clone + Send + Sync,
51{
52 fn from(input: (GeneticEngine<C, T>, Duration)) -> Self {
53 UiInput::EngineRenderInterval(input.0, input.1)
54 }
55}