acts 0.17.2

a fast, lightweight, extensiable workflow engine
Documentation
use crate::event::EventAction;
use crate::{Action, Result, Vars, scheduler::Runtime};
use std::sync::Arc;

#[derive(Clone)]
pub struct ActExecutor {
    runtime: Arc<Runtime>,
}

impl ActExecutor {
    pub fn new(rt: &Arc<Runtime>) -> Self {
        Self {
            runtime: rt.clone(),
        }
    }

    pub fn submit(&self, pid: &str, tid: &str, options: &Vars) -> Result<()> {
        self.do_action(pid, tid, EventAction::Submit, options)
    }

    pub fn back(&self, pid: &str, tid: &str, options: &Vars) -> Result<()> {
        self.do_action(pid, tid, EventAction::Back, options)
    }

    pub fn cancel(&self, pid: &str, tid: &str, options: &Vars) -> Result<()> {
        self.do_action(pid, tid, EventAction::Cancel, options)
    }

    pub fn complete(&self, pid: &str, tid: &str, options: &Vars) -> Result<()> {
        self.do_action(pid, tid, EventAction::Next, options)
    }

    pub fn abort(&self, pid: &str, tid: &str, options: &Vars) -> Result<()> {
        self.do_action(pid, tid, EventAction::Abort, options)
    }

    pub fn skip(&self, pid: &str, tid: &str, options: &Vars) -> Result<()> {
        self.do_action(pid, tid, EventAction::Skip, options)
    }

    pub fn error(&self, pid: &str, tid: &str, options: &Vars) -> Result<()> {
        self.do_action(pid, tid, EventAction::Error, options)
    }

    pub fn push(&self, pid: &str, tid: &str, options: &Vars) -> Result<()> {
        self.do_action(pid, tid, EventAction::Push, options)
    }

    pub fn remove(&self, pid: &str, tid: &str, options: &Vars) -> Result<()> {
        self.do_action(pid, tid, EventAction::Remove, options)
    }

    pub fn set_process_vars(&self, pid: &str, tid: &str, options: &Vars) -> Result<()> {
        self.do_action(pid, tid, EventAction::SetProcessVars, options)
    }

    pub fn do_action(
        &self,
        pid: &str,
        tid: &str,
        action: EventAction,
        options: &Vars,
    ) -> Result<()> {
        self.runtime
            .do_action(&Action::new(pid, tid, action, options))
    }
}