use crate::{Runner, WorkflowMessage, WorkflowRunner};
pub trait Plugin: Send {
fn on_init(&self, _runner: &Runner) {}
fn on_event(&self, _event: &WorkflowMessage) {}
fn on_workflow_runner_init(&self, _runner: &WorkflowRunner) {}
}
pub struct PluginManager {
plugins: Vec<Box<dyn Plugin>>,
}
impl PluginManager {
pub fn new() -> Self {
PluginManager { plugins: vec![] }
}
pub fn register(&mut self, plugin: Box<dyn Plugin>) {
self.plugins.push(plugin);
}
pub fn on_workflow_runner_init(&self, runner: &WorkflowRunner) {
for plugin in &self.plugins {
plugin.on_workflow_runner_init(runner);
}
}
}