use tokio_events::{Event, EventBus};
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
struct MyEvent {
pub message: String,
}
impl Event for MyEvent {
fn event_type() -> &'static str {
"MyEvent"
}
}
#[tokio::main]
async fn main() {
println!("Testing tokio-events...\n");
let bus = EventBus::builder().build().await.unwrap();
let handle = bus
.subscribe(|event: MyEvent| async move {
println!("📨 Received: {}", event.message);
})
.await
.unwrap();
let handle2 = bus
.subscribe(|event: MyEvent| async move {
println!("📨 Received in second handler: {}", event.message);
})
.await
.unwrap();
println!("Publishing events...");
bus.publish(MyEvent {
message: "Hello!".into(),
})
.await
.unwrap();
bus.publish(MyEvent {
message: "World!".into(),
})
.await
.unwrap();
bus.publish(MyEvent {
message: "Event Bus is working!".into(),
})
.await
.unwrap();
bus.unsubscribe(handle).await.unwrap();
bus.unsubscribe(handle2).await.unwrap();
bus.shutdown().await.unwrap();
println!("\n✅ Test completed successfully!");
}