pub mod automaton;
pub mod infra;
pub mod language;
pub mod mapserver;
pub mod pipeline;
pub mod platform;
pub mod provision;
pub mod rwe;
pub mod version;
pub mod zebfs;
use std::sync::Arc;
use automaton::{AutomatonEngine, AutomatonEngineRegistry, NoopAutomatonEngine};
use language::{DenoSandboxEngine, LanguageEngine, LanguageEngineRegistry, NoopLanguageEngine};
use pipeline::{BasicPipelineEngine, NoopPipelineEngine, PipelineEngine, PipelineEngineRegistry};
use rwe::{ReactiveWebEngine, ReactiveWebEngineRegistry, RweReactiveWebEngine};
#[derive(Clone)]
pub struct ZebflowEngineKit {
pub automaton: AutomatonEngineRegistry,
pub pipeline: PipelineEngineRegistry,
pub language: LanguageEngineRegistry,
pub rwe: ReactiveWebEngineRegistry,
}
impl ZebflowEngineKit {
pub fn with_defaults() -> Self {
let mut automaton = AutomatonEngineRegistry::new();
automaton.register(Arc::new(NoopAutomatonEngine));
let mut pipeline = PipelineEngineRegistry::new();
pipeline.register(Arc::new(BasicPipelineEngine::default()));
pipeline.register(Arc::new(NoopPipelineEngine::default()));
let mut language = LanguageEngineRegistry::new();
language.register(Arc::new(DenoSandboxEngine::default()));
language.register(Arc::new(NoopLanguageEngine::default()));
let mut rwe = ReactiveWebEngineRegistry::new();
rwe.register(Arc::new(RweReactiveWebEngine::default()));
Self {
automaton,
pipeline,
language,
rwe,
}
}
pub fn automaton_engine(&self, id: &str) -> Option<Arc<dyn AutomatonEngine>> {
self.automaton.get(id)
}
pub fn pipeline_engine(&self, id: &str) -> Option<Arc<dyn PipelineEngine>> {
self.pipeline.get(id)
}
pub fn language_engine(&self, id: &str) -> Option<Arc<dyn LanguageEngine>> {
self.language.get(id)
}
pub fn rwe_engine(&self, id: &str) -> Option<Arc<dyn ReactiveWebEngine>> {
self.rwe.get(id)
}
}