use async_trait::async_trait;
use orsomafo::{Dispatchable, DispatchedEvent, EventDispatcherBuilder, EventHandler};
#[tokio::main]
async fn main() {
pretty_env_logger::init();
UserCreated::subscribe::<HandleUserCreated>().await;
let event = UserCreated { id: 45 };
let event_string = event.serialize_event();
println!("event's json dump: {:#?}", event_string);
let dispatcher = EventDispatcherBuilder::new().build().await;
dispatcher.dispatch_json(&event_string);
}
#[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)
}
}