service_runtime/
service_runtime.rs

1use flarrow_runtime::prelude::{thirdparty::*, *};
2
3#[tokio::main]
4async fn main() -> Result<()> {
5    tracing_subscriber::fmt::init();
6
7    let mut layout = DataflowLayout::new();
8
9    let (service, (compare_to_128, compare_to_64)) = layout
10        .node("service", async |builder: &mut NodeIOBuilder| {
11            (
12                builder.queryable("compare_to_128"),
13                builder.queryable("compare_to_64"),
14            )
15        })
16        .await;
17
18    let (client, (ask_128, ask_64)) = layout
19        .node("client", async |builder: &mut NodeIOBuilder| {
20            (builder.query("ask_128"), builder.query("ask_64"))
21        })
22        .await;
23
24    let layout = layout.build();
25
26    let flows = Flows::new(layout.clone(), async move |builder: &mut FlowsBuilder| {
27        builder.connect(ask_128, compare_to_128, None)?;
28        builder.connect(ask_64, compare_to_64, None)?;
29
30        Ok(())
31    })
32    .await?;
33
34    let runtime = Runtime::new(
35        async |_file_ext: &mut FileExtManagerBuilder, _url_scheme: &mut UrlSchemeManagerBuilder| {
36            Ok(())
37        },
38    )
39    .await?;
40
41    let path = std::env::var("CARGO_MANIFEST_DIR")?;
42    let examples = format!("file://{}/../../target/debug/examples", path);
43
44    runtime
45        .run(flows, async move |loader: &mut NodeLoader| {
46            let service_file = Url::parse(&format!("{}/libservice.so", examples))?;
47            let client_file = Url::parse(&format!("{}/libclient.so", examples))?;
48
49            loader
50                .load_url(service_file, service, serde_yml::from_str("")?)
51                .await?;
52
53            loader
54                .load_url(client_file, client, serde_yml::from_str("")?)
55                .await?;
56
57            Ok(())
58        })
59        .await
60}