basu 0.1.9

Eventbus crate with sync and async features
Documentation
use crate::{error::BasuError, event::Event, EventBus, Handle};

#[derive(Debug)]
struct Data {
    message: String,
}

struct HandlerA;
struct HandlerB;

impl Handle<Data> for HandlerA {
    fn handle(&self, event: &Event<Data>) -> Result<(), BasuError> {
        let data = event.get_data();
        println!("HandlerA: {}", data.message);

        Ok(())
    }
}

impl Handle<Data> for HandlerB {
    fn handle(&self, event: &Event<Data>) -> Result<(), BasuError> {
        let data = event.get_data();
        println!("HandlerB: {}", data.message);

        Ok(())
    }
}

const ECHO: &str = "echo";

#[test]
fn test() {
    let eventbus = EventBus::new();

    let handler_a_id = eventbus.subscribe(ECHO, Box::new(HandlerA)).unwrap();
    println!("HandlerA id: {:?}", handler_a_id);

    let event = Event::new(Data {
        message: "{data from event}".to_owned(),
    });

    eventbus.publish(ECHO, &event).unwrap();
    let event_types = eventbus.list().unwrap();
    assert_eq!(event_types, vec![ECHO.to_owned()]);

    let count = eventbus.get_handler_count(ECHO).unwrap();
    assert_eq!(count, 1);

    let handler_b_id = eventbus.subscribe(ECHO, Box::new(HandlerB)).unwrap();
    println!("HandlerB id: {:?}", handler_b_id);

    let count = eventbus.get_handler_count(ECHO).unwrap();
    assert_eq!(count, 2);
    eventbus.publish(ECHO, &event).unwrap();

    eventbus.unsubscribe(ECHO, &handler_a_id).unwrap();
    let count = eventbus.get_handler_count(ECHO).unwrap();
    assert_eq!(count, 1);

    eventbus.clear().unwrap();
    let event_types = eventbus.list().unwrap();
    assert_eq!(event_types.len(), 0);
}