simple_runtime/
simple_runtime.rs

1use flarrow_builtins::prelude::*;
2use flarrow_file_ext::prelude::*;
3use flarrow_flows::prelude::*;
4use flarrow_layout::prelude::*;
5use flarrow_url_scheme::prelude::*;
6
7use flarrow_runtime::prelude::{thirdparty::*, *};
8
9#[tokio::main]
10async fn main() -> Result<()> {
11    tracing_subscriber::fmt::init();
12
13    let mut layout = DataflowLayout::new();
14
15    let (source, output) = layout
16        .node("source", async |builder: &mut NodeIOBuilder| {
17            builder.output("out")
18        })
19        .await;
20
21    let (operator, (op_in, op_out)) = layout
22        .node("operator", async |builder: &mut NodeIOBuilder| {
23            (builder.input("in"), builder.output("out"))
24        })
25        .await;
26
27    let (sink, input) = layout
28        .node("sink", async |builder: &mut NodeIOBuilder| {
29            builder.input("in")
30        })
31        .await;
32
33    let layout = layout.build();
34
35    let flows = Flows::new(layout.clone(), async move |builder: &mut FlowsBuilder| {
36        builder.connect(op_in, output, None)?;
37        builder.connect(input, op_out, None)?;
38
39        Ok(())
40    })
41    .await?;
42
43    let runtime = Runtime::new(
44        async |_file_ext: &mut FileExtManagerBuilder, _url_scheme: &mut UrlSchemeManagerBuilder| {
45            Ok(())
46        },
47    )
48    .await?;
49
50    runtime
51        .run(flows, async move |loader: &mut NodeLoader| {
52            loader
53                .load::<Timer>(source, serde_yml::from_str("frequency: 1.0")?)
54                .await?;
55
56            loader
57                .load::<Transport>(operator, serde_yml::from_str("")?)
58                .await?;
59
60            loader
61                .load::<Printer>(sink, serde_yml::from_str("")?)
62                .await?;
63
64            Ok(())
65        })
66        .await
67}