acts-next 0.15.5

a fast, tiny, extensiable workflow engine
Documentation
use crate::{scheduler::Context, ActError, ActTask, Pack, Result, StoreAdapter, TaskState};
use async_trait::async_trait;

#[async_trait]
impl ActTask for Pack {
    fn init(&self, ctx: &Context) -> Result<()> {
        let task = ctx.task();
        if self.key.is_empty() {
            return Err(crate::ActError::Action(format!(
                "cannot find 'key' in act '{}'",
                task.node.id
            )));
        }
        task.set_emit_disabled(true);
        Ok(())
    }

    fn run(&self, ctx: &Context) -> Result<()> {
        let task = ctx.task();
        let pack = ctx.runtime.cache().store().packages().find(&self.key)?;
        let script: String = String::from_utf8(pack.data).map_err(ActError::from)?;
        ctx.eval::<()>(&script)?;

        if task.state().is_running() {
            task.set_state(TaskState::Completed);
        }
        Ok(())
    }
}