coodev_runner/runner/
plugins.rs1use crate::{Runner, WorkflowMessage, WorkflowRunner};
2
3pub trait Plugin: Send {
4 fn on_init(&self, _runner: &Runner) {}
5 fn on_event(&self, _event: &WorkflowMessage) {}
6 fn on_workflow_runner_init(&self, _runner: &WorkflowRunner) {}
7}
8
9pub struct PluginManager {
10 plugins: Vec<Box<dyn Plugin>>,
11}
12
13impl PluginManager {
14 pub fn new() -> Self {
15 PluginManager { plugins: vec![] }
16 }
17
18 pub fn register(&mut self, plugin: Box<dyn Plugin>) {
19 self.plugins.push(plugin);
20 }
21
22 pub fn on_workflow_runner_init(&self, runner: &WorkflowRunner) {
29 for plugin in &self.plugins {
30 plugin.on_workflow_runner_init(runner);
31 }
32 }
33}