acts-next 0.15.6

a fast, tiny, extensiable workflow engine
Documentation
use acts_next::{Builder, Vars, Workflow};

mod client;

#[tokio::main]
async fn main() {
    let client = client::Client::new();
    let engine = Builder::new().tick_interval_secs(1).build();
    let (s1, s2, sig) = engine.signal(()).triple();
    let text = include_str!("./model.yml");
    let workflow = Workflow::from_yml(text).unwrap();
    workflow.print();

    let executor = engine.executor().clone();
    engine
        .executor()
        .model()
        .deploy(&workflow)
        .expect("deploy model");
    executor
        .proc()
        .start(&workflow.id, &Vars::new())
        .expect("start workflow");

    engine.channel().on_message(move |e| {
        let ret = client.process(&executor, e);
        if ret.is_err() {
            eprintln!("{}", ret.err().unwrap());
            std::process::exit(1);
        }
    });

    engine.channel().on_complete(move |e| {
        println!(
            "on_workflow_complete: pid={} cost={}ms outputs={:?}",
            e.pid,
            e.cost(),
            e.outputs
        );
        s1.close();
    });

    engine.channel().on_error(move |e| {
        println!(
            "on_workflow_error: pid={} cost={}ms state={:?}",
            e.pid,
            e.cost(),
            e.state
        );
        s2.close();
    });
    sig.recv().await;
}