use crate::EventBus;
use crate::filter_library::FilterLibrary;
use crate::runner::Runner;
use somatize_compiler::{CompileMode, compile};
use somatize_core::cache::CacheStore;
use somatize_core::error::Result;
use somatize_core::graph::Graph;
use somatize_core::value::Value;
use std::collections::HashMap;
use std::sync::Arc;
pub struct SimpleExecutor;
impl SimpleExecutor {
#[allow(clippy::too_many_arguments)]
pub fn run(
&self,
runner: &dyn Runner,
graph: &Graph,
filters: &FilterLibrary,
cache: &dyn CacheStore,
event_bus: &Arc<EventBus>,
x: &Value,
y: Option<&Value>,
) -> Result<(Value, HashMap<String, Value>)> {
graph.validate()?;
let plan = compile(graph, filters, CompileMode::NoCache, Some(cache))?.plan;
runner.fit(&plan, filters, cache, event_bus, x, y)
}
pub fn forward(
&self,
runner: &dyn Runner,
graph: &Graph,
filters: &FilterLibrary,
cache: &dyn CacheStore,
event_bus: &Arc<EventBus>,
x: &Value,
) -> Result<Value> {
let plan = compile(graph, filters, CompileMode::Inference, Some(cache))?.plan;
runner.forward(&plan, filters, cache, event_bus, x)
}
}