yao 0.1.4

a fast, tiny, extensiable workflow engine
Documentation
use clap::Parser;
use std::{fs::File, io::Read};
use yao::{Engine, Workflow};

#[derive(Parser, Debug)]
#[clap(author, version, about)]
struct Args {
    #[clap(short, long, value_parser)]
    model: String,
}

#[tokio::main]
async fn main() {
    let args = Args::parse();

    let workflow = read_file_to_workflow(&args.model);
    let engine = Engine::new();
    engine.push(&workflow);

    let e = engine.clone();
    engine.on_workflow_complete(move |_w: &Workflow| {
        e.close();
    });
    engine.start().await;
}

fn read_file_to_workflow(file_name: &str) -> Workflow {
    let mut file = File::open(file_name).expect("Invalid config file");
    let mut config_value = String::new();
    file.read_to_string(&mut config_value)
        .expect("Read config file error");
    let workflow: Workflow = serde_yaml::from_str(&config_value).expect("Parse yaml error");

    workflow
}