use async_trait::async_trait;
use orsomafo::{Dispatchable, DispatchedEvent, EventHandler};
use tokio::time::{sleep, Duration};
#[tokio::main]
async fn main() {
pretty_env_logger::init();
UserCreated::subscribe::<HandleUserCreated>().await;
UserCreated::subscribe::<HandleUserCreated2>().await;
let event = UserCreated { id: 8701 };
event.dispatch_event();
sleep(Duration::from_millis(100)).await;
}
#[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!("User with ID: {} created", event.id);
}
fn propagate(&self) -> bool {
false }
}
#[derive(Default)]
struct HandleUserCreated2;
#[async_trait]
impl EventHandler for HandleUserCreated2 {
async fn handle(&self, dispatched: DispatchedEvent) {
println!("Handling event with ID: {}", dispatched.id());
}
}