use async_trait::async_trait;
use orsomafo::{Dispatchable, DispatchedEvent, EventHandler};
#[tokio::main]
async fn main() {
pretty_env_logger::init();
UserCreated::subscribe::<HandleUserCreated>().await;
UserCreated::subscribe_with(HandleUserCreated).await;
let event = UserCreated { id: 33 };
event.dispatch_event();
let events = vec![
UserCreated { id: 1 },
UserCreated { id: 2 },
UserCreated { id: 3 },
];
events.into_iter().for_each(|an_event| {
an_event.dispatch_event();
});
}
#[derive(Clone, serde::Deserialize, serde::Serialize)]
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)
}
}