use abxbus::{event, event_bus::EventBus};
use futures::executor::block_on;
use serde_json::json;
event! {
struct CreateUserEvent {
email: String,
event_result_type: serde_json::Value,
}
}
let bus = EventBus::new(Some("MyAuthEventBus".to_string()));
bus.on(CreateUserEvent, |event: CreateUserEvent| async move {
let email = event.email.clone();
Ok(json!({"user_id": format!("created:{email}")}))
});
let event = bus.emit(CreateUserEvent {
email: "[email protected]".to_string(),
..Default::default()
});
block_on(async {
let completed = event.now().await?;
let result = completed.event_result().await?;
println!("{result:?}");
Ok::<(), String>(())
})?;