Skip to main content

radiate_ui/
lib.rs

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}