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;
let event = UserCreated { id: 1 };
event.dispatch_event();
let event = UserCreated { id: 2 };
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) {
println!("event id: {:?} was handled", dispatched.id());
}
fn execute_once(&self) -> bool {
true }
}