simple_runtime/
simple_runtime.rs1use 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}