base/
base.rs

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    // Register EventA listener
25    bus.once::<EventA>(from_fn(|_| async {
26        println!("Handled  Event A");
27    }));
28
29    // Register EventB listener
30    let handle2 = bus.on(from_fn(|_: Rent<EventB>| async {
31        println!("Handled  Event B");
32    }));
33
34    // Register EventC listener
35    bus.many(3, from_fn(event_c_listener));
36
37    // Emit events
38    bus.emit(EventA).await;
39    bus.emit(EventB).await;
40    bus.emit(EventC).await;
41    bus.emit(EventD).await;
42
43    // Cancel EventB listener and register EventD listener
44    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    // Emit again
51    bus.emit(EventA).await;
52    bus.emit(EventB).await;
53    bus.clone().emit(EventD).await;
54    bus.drain().await;
55}