#![allow(clippy::unused_async)]
use blazen::prelude::*;
#[derive(Debug, Clone, Serialize, Deserialize, Event)]
struct GreetEvent {
name: String,
}
#[step]
async fn parse_input(event: StartEvent, _ctx: Context) -> Result<GreetEvent, WorkflowError> {
let name = event.data["name"].as_str().unwrap_or("World").to_string();
println!("[parse_input] Extracted name: {name}");
Ok(GreetEvent { name })
}
#[step]
async fn greet(event: GreetEvent, _ctx: Context) -> Result<StopEvent, WorkflowError> {
let greeting = format!("Hello, {}!", event.name);
println!("[greet] {greeting}");
Ok(StopEvent {
result: serde_json::json!({ "greeting": greeting }),
})
}
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let workflow = WorkflowBuilder::new("greeter")
.step(parse_input_registration())
.step(greet_registration())
.build()?;
let handler = workflow.run(serde_json::json!({ "name": "Zach" })).await?;
let result = handler.result().await?.event;
if let Some(stop) = result.downcast_ref::<StopEvent>() {
println!("\nFinal result: {}", stop.result);
}
Ok(())
}