stdout_event_sink/
stdout_event_sink.rs1use runkon_flow::events::{EngineEvent, EngineEventData, EventSink};
2use runkon_flow::FlowEngineBuilder;
3
4struct StdoutEventSink;
6
7impl EventSink for StdoutEventSink {
8 fn emit(&self, event: &EngineEventData) {
9 let summary = match &event.event {
10 EngineEvent::RunStarted { workflow_name } => {
11 format!("run started (workflow={})", workflow_name)
12 }
13 EngineEvent::RunCompleted { succeeded } => {
14 format!("run completed (succeeded={})", succeeded)
15 }
16 EngineEvent::StepStarted { step_name } => {
17 format!("step started (step={})", step_name)
18 }
19 EngineEvent::StepCompleted {
20 step_name,
21 succeeded,
22 } => {
23 format!(
24 "step completed (step={}, succeeded={})",
25 step_name, succeeded
26 )
27 }
28 _ => format!("{:?}", event.event),
29 };
30 println!("[{}] run={} {}", event.timestamp, event.run_id, summary);
31 }
32}
33
34fn main() {
35 let sink = StdoutEventSink;
36
37 sink.emit(&EngineEventData::new(
38 "run-001".into(),
39 EngineEvent::RunStarted {
40 workflow_name: "my-workflow".into(),
41 },
42 ));
43 sink.emit(&EngineEventData::new(
44 "run-001".into(),
45 EngineEvent::RunCompleted { succeeded: true },
46 ));
47
48 let _engine = FlowEngineBuilder::new()
50 .event_sink(Box::new(StdoutEventSink))
51 .build()
52 .expect("engine build failed");
53 println!("engine built with StdoutEventSink attached");
54}