Skip to main content

radiate_ui/
lib.rs

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