use async_trait::async_trait;
use orsomafo::{Dispatchable, DispatchedEvent, EventDispatcherBuilder, EventHandler};
use tokio::time::{sleep, Duration};
#[tokio::main]
async fn main() {
pretty_env_logger::init();
let dispatcher = EventDispatcherBuilder::new()
.listen::<UserCreated, HandleUserCreated>()
.build()
.await;
let user = UserCreated { id: 1 };
user.dispatch_event();
let user2 = UserCreated { id: 2 };
dispatcher.dispatch(user2);
sleep(Duration::from_millis(100)).await;
}
#[derive(Clone)]
struct UserCreated {
id: u32,
}
impl Dispatchable for UserCreated {}
#[derive(Default)]
struct HandleUserCreated;
#[async_trait]
impl EventHandler for HandleUserCreated {
async fn handle(&self, dispatched: &DispatchedEvent) {
let event: UserCreated = dispatched.the_event().unwrap();
println!("we are handling user created event: {:?}", event.id)
}
}