1use evno::{Bus, Rent, from_fn};
2use std::time::Duration;
3
4#[derive(Clone)]
5struct EventA;
6
7#[derive(Clone)]
8struct EventB;
9
10#[derive(Clone)]
11struct EventC;
12
13#[derive(Clone)]
14struct EventD;
15
16async fn event_c_listener(_: Rent<EventC>) {
17 println!("Handled Event C");
18}
19
20#[tokio::main]
21async fn main() {
22 let bus = Bus::new(2);
23
24 bus.once::<EventA>(from_fn(|_| async {
26 println!("Handled Event A");
27 }));
28
29 let handle2 = bus.on(from_fn(|_: Rent<EventB>| async {
31 println!("Handled Event B");
32 }));
33
34 bus.many(3, from_fn(event_c_listener));
36
37 bus.emit(EventA).await;
39 bus.emit(EventB).await;
40 bus.emit(EventC).await;
41 bus.emit(EventD).await;
42
43 handle2.cancel();
45 tokio::time::sleep(Duration::from_millis(1)).await;
46 bus.on(from_fn(|_: Rent<EventD>| async {
47 println!("Handled Event D");
48 }));
49
50 bus.emit(EventA).await;
52 bus.emit(EventB).await;
53 bus.clone().emit(EventD).await;
54 bus.drain().await;
55}