use crate::types::CancelWorkflowRun;
use coodev_runner::{Runner, Workflow, WorkflowMessage, WorkflowRunner};
pub trait ClientPlugin {
fn on_init(&self, _runner: &Runner) {}
fn on_event(&self, _event: &WorkflowMessage) {}
fn on_workflow_runner_init(&self, _runner: &WorkflowRunner) {}
fn on_run_workflow(&self, _options: &Workflow) {}
fn on_cancel_workflow_run(&self, _options: &CancelWorkflowRun) {}
fn on_connected(&self) {}
fn on_disconnected(&self) {}
}
pub struct ClientPluginManager {
plugins: Vec<Box<dyn ClientPlugin>>,
}
impl ClientPluginManager {
pub fn new() -> Self {
ClientPluginManager { plugins: vec![] }
}
pub fn register(&mut self, plugin: Box<dyn ClientPlugin>) {
self.plugins.push(plugin);
}
pub fn init(&self, runner: &Runner) {
for plugin in &self.plugins {
plugin.on_init(runner);
}
}
pub fn on_event(&self, event: &WorkflowMessage) {
for plugin in &self.plugins {
plugin.on_event(event);
}
}
pub fn on_workflow_runner_init(&self, runner: &WorkflowRunner) {
for plugin in &self.plugins {
plugin.on_workflow_runner_init(runner);
}
}
pub fn on_run_workflow(&self, options: &Workflow) {
for plugin in &self.plugins {
plugin.on_run_workflow(options);
}
}
pub fn on_cancel_workflow_run(&self, options: &CancelWorkflowRun) {
for plugin in &self.plugins {
plugin.on_cancel_workflow_run(options);
}
}
}