shrev 0.1.1

Event handler, using shred for synchronization, allowing immutable reads.
Documentation

A pull based event handler, with events stored in a ring buffer, using Shred for synchronization.

Example

extern crate shrev;

use shrev::EventHandler;

#[derive(Clone, Debug, PartialEq, Eq)]
pub struct TestEvent {
    data : u32
}

#[derive(Clone, Debug, PartialEq, Eq)]
pub struct TestEvent2 {
    data : u32
}

fn main() {
    let mut event_handler = EventHandler::new();
    event_handler.register::<TestEvent>();
    event_handler.register::<TestEvent2>();
    let mut reader_id_2 = event_handler.register_reader::<TestEvent2>().unwrap();

    event_handler.write(&mut vec![TestEvent { data : 1}, TestEvent { data : 2}]).expect("");
    event_handler.write(&mut vec![TestEvent2 { data : 3}, TestEvent2 { data : 4}]).expect("");

    let mut reader_id_1 = event_handler.register_reader::<TestEvent>().unwrap();

    // Should have data, as reader was created before the first write
    assert_eq!(Ok([TestEvent2 { data: 3 }, TestEvent2 { data: 4 }].to_vec()),
               event_handler.read::<TestEvent2>(&mut reader_id_2));

    // Should be empty, because no write was done after previous read
    assert_eq!(Ok([].to_vec()), event_handler.read::<TestEvent2>(&mut reader_id_2));

    // Should be empty, because reader was created after the write
    assert_eq!(Ok([].to_vec()), event_handler.read::<TestEvent>(&mut reader_id_1));

    event_handler.write(&mut vec![TestEvent2 { data : 8}, TestEvent2 { data : 9}]).expect("");

    // Should have data, as a second write was done
    assert_eq!(Ok([TestEvent2 { data: 8 }, TestEvent2 { data: 9 }].to_vec()),
               event_handler.read::<TestEvent2>(&mut reader_id_2));

}