use super::CosmicusServer;
use crate::types::{CancelWorkflowRun, RegisterRunner, RunWorkflowConfig};
use coodev_runner::WorkflowMessage;
pub trait ServerPlugin: Send + Sync {
fn on_init(&self, _server: &CosmicusServer) {}
fn on_event(&self, _event: &WorkflowMessage) {}
fn on_runner_registered(&self, _runner: &RegisterRunner) {}
fn on_run_workflow(&self, _options: &RunWorkflowConfig) {}
fn on_cancel_workflow_run(&self, _options: &CancelWorkflowRun) {}
}
pub struct ServerPluginManager {
plugins: Vec<Box<dyn ServerPlugin>>,
}
impl ServerPluginManager {
pub fn new() -> Self {
ServerPluginManager { plugins: vec![] }
}
pub fn register(&mut self, plugin: Box<dyn ServerPlugin>) {
self.plugins.push(plugin);
}
pub fn on_event(&self, event: &WorkflowMessage) {
for plugin in &self.plugins {
plugin.on_event(event);
}
}
pub fn on_runner_registered(&self, runner: &RegisterRunner) {
for plugin in &self.plugins {
plugin.on_runner_registered(runner);
}
}
pub fn on_run_workflow(&self, options: &RunWorkflowConfig) {
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);
}
}
}