simple/
simple.rs

1use std::{env, sync::Arc, thread::sleep, time::Duration};
2
3extern crate event_stream;
4
5use event_stream::{EventDispatcherBuilder, EventListener};
6
7#[derive(Debug, Clone)]
8enum Event {
9    Ping,
10    Hello(String),
11}
12
13#[derive(Clone)]
14struct MyListener;
15
16impl MyListener {
17    pub fn new() -> Arc<Self> {
18        Arc::new(Self {})
19    }
20}
21
22impl EventListener<Event> for MyListener {
23    fn dispatch(&self, event: &Event) {
24        println!("{:?} got event: {:?}", self, event);
25    }
26}
27
28impl std::fmt::Debug for MyListener {
29    fn fmt(&self, out: &mut std::fmt::Formatter<'_>) -> std::result::Result<(), std::fmt::Error> {
30        write!(out, "<MyListener>")
31    }
32}
33
34fn main() {
35    env::set_var("RUST_LOG", "simple=debug");
36    env::set_var("RUST_BACKTRACE", "1");
37
38    let event_dispatcher = EventDispatcherBuilder::new()
39        .add_listener(MyListener::new())
40        .build();
41
42    event_dispatcher.start();
43
44    sleep(Duration::from_secs(1));
45
46    event_dispatcher.emit(Event::Ping);
47
48    sleep(Duration::from_secs(1));
49
50    event_dispatcher.emit(Event::Hello("world".to_string()));
51
52    sleep(Duration::from_secs(1));
53
54    println!("done.");
55}