iridis 0.3.1

The iridis runtime and api for building and running dataflow applications.
Documentation
use iridis::prelude::{thirdparty::*, *};

#[tokio::main]
async fn main() -> Result<()> {
    tracing_subscriber::fmt::init();

    let mut layout = DataflowLayout::new();

    let (service, (compare_to_128, compare_to_64)) = layout
        .node("service", async |builder: &mut NodeIOBuilder| {
            (
                builder.queryable("compare_to_128"),
                builder.queryable("compare_to_64"),
            )
        })
        .await;

    let (client, (ask_128, ask_64)) = layout
        .node("client", async |builder: &mut NodeIOBuilder| {
            (builder.query("ask_128"), builder.query("ask_64"))
        })
        .await;

    let layout = layout.build();

    let flows = Flows::new(layout.clone(), async move |builder: &mut FlowsBuilder| {
        builder.connect(ask_128, compare_to_128, None)?;
        builder.connect(ask_64, compare_to_64, None)?;

        Ok(())
    })
    .await?;

    let runtime = Runtime::new(
        async |_file_ext: &mut FileExtManagerBuilder, _url_scheme: &mut UrlSchemeManagerBuilder| {
            Ok(())
        },
    )
    .await?;

    let path = std::env::var("CARGO_MANIFEST_DIR")?;
    let examples = format!("file://{}/../../target/debug/examples", path);

    runtime
        .run(flows, async move |loader: &mut NodeLoader| {
            let service_file = Url::parse(&format!("{}/libservice.so", examples))?;
            let client_file = Url::parse(&format!("{}/libclient.so", examples))?;

            loader
                .load_url(service_file, service, serde_yml::from_str("")?)
                .await?;

            loader
                .load_url(client_file, client, serde_yml::from_str("")?)
                .await?;

            Ok(())
        })
        .await
}