coodev_runner/runner/
plugins.rs

1use 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 init(&self, runner: &Runner) {
23  //   for plugin in &self.plugins {
24  //     plugin.init(runner);
25  //   }
26  // }
27
28  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}