Skip to main content

melodium_engine/
engine.rs

1use crate::{
2    debug::{DebugLevel, Event},
3    error::{LogicErrors, LogicResult},
4};
5use async_std::channel::Sender;
6use async_trait::async_trait;
7use melodium_common::{
8    descriptor::{Collection, Identifier},
9    executive::{DirectCreationCallback, Level as LogLevel, Log, Value},
10};
11use std::{collections::HashMap, sync::Arc};
12
13#[async_trait]
14pub trait Engine: Send + Sync {
15    fn collection(&self) -> Arc<Collection>;
16    fn genesis(&self, entry: &Identifier, params: HashMap<String, Value>) -> LogicResult<()>;
17    fn errors(&self) -> LogicErrors;
18    fn set_auto_end(&self, auto_end: bool);
19    fn auto_end(&self) -> bool;
20    fn log_level(&self) -> LogLevel;
21    fn add_logs_listener(&self, sender: Sender<Log>);
22    fn debug_level(&self) -> DebugLevel;
23    fn add_debug_listener(&self, sender: Sender<Event>);
24    async fn live(&self);
25    async fn instanciate(&self, callback: Option<DirectCreationCallback>) -> LogicResult<()>;
26    async fn end(&self);
27}