rs-flow 0.5.0

Create flows to execute based in components created and yours connections
Documentation
use std::sync::Arc;

use rs_flow::prelude::*;

mod components;
use components::{
    MyGlobal,
    message::Message,
    log::Log
};


#[tokio::test]
async fn simple_case() -> Result<()> {

    let message1 = Component::new(1, Message { message: "Hello".to_string() });
    let message2 = Component::new(2, Message { message: "World".to_string() });
    let log = Component::new(3, Log);

    let flow = Flow::new()
        .add_component(message1)?
        .add_component(message2)?
        .add_component(log)?
        .add_connection(Connection::new(1, 0, 3, 0))?
        .add_connection(Connection::new(2, 0, 3, 0))?;

    let flow = Arc::new(flow);
    
    let mut handlers = vec![];
    for _ in 0..10 {
        let tflow = flow.clone();
        let handler = tokio::spawn(async move {
            let global = tflow.run(MyGlobal { count: 0 }).await.unwrap();
            
            assert!(global.count == 2);
            println!("{:?}", global);
        });
        handlers.push(handler);
    }
    
    for handler in handlers  {
        let _ = handler.await;
    }
    
    Ok(())
}