cosmicus 0.1.9

Cosmicus Client and Server to make the runner better
Documentation
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);
    }
  }
}