#ecs #specs #events

shrev

Event channel, meant to be used with specs

18 releases (4 stable)

✓ Uses Rust 2018 edition

1.1.1 May 4, 2019
1.0.1 May 13, 2018
0.8.2 Apr 24, 2018
0.8.1 Dec 17, 2017
0.6.0 Oct 6, 2017

#6 in Game development

Download history 625/week @ 2019-03-24 742/week @ 2019-03-31 648/week @ 2019-04-07 1435/week @ 2019-04-14 1296/week @ 2019-04-21 993/week @ 2019-04-28 997/week @ 2019-05-05 1468/week @ 2019-05-12 1874/week @ 2019-05-19 1582/week @ 2019-05-26 885/week @ 2019-06-02 1175/week @ 2019-06-09 916/week @ 2019-06-16 962/week @ 2019-06-23 1148/week @ 2019-06-30

4,439 downloads per month
Used in 97 crates (11 directly)

MIT/Apache

38KB
815 lines

shrev

crates.io badge docs badge

A pull based event channel, with events stored in a ring buffer, meant to be used as a resource in specs.

Example usage

extern crate shrev;

use shrev::EventChannel;

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

fn main() {
    let mut channel = EventChannel::new();

    channel.drain_vec_write(&mut vec![TestEvent { data: 1 }, TestEvent { data: 2 }]);

    let mut reader_id = channel.register_reader();

    // Should be empty, because reader was created after the write
    assert_eq!(
        Vec::<TestEvent>::default(),
        channel.read(&mut reader_id).cloned().collect::<Vec<_>>()
    );

    // Should have data, as a second write was done
    channel.single_write(TestEvent { data: 5 });

    assert_eq!(
        vec![TestEvent { data: 5 }],
        channel.read(&mut reader_id).cloned().collect::<Vec<_>>()
    );

    // We can also just send in an iterator.
    channel.iter_write(
        [TestEvent { data: 8 }, TestEvent { data: 9 }]
            .iter()
            .cloned(),
    );

    assert_eq!(
        vec![TestEvent { data: 8 }, TestEvent { data: 9 }],
        channel.read(&mut reader_id).cloned().collect::<Vec<_>>()
    );
}

License

shrev-rs is free and open source software distributed under the terms of both the MIT License and the Apache License 2.0.

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

No runtime deps