#ecs #specs #events

shrev

Event channel, meant to be used with specs

19 releases (5 stable)

1.1.3 Jun 4, 2022
1.1.1 May 4, 2019
1.0.1 May 13, 2018
0.8.2 Apr 24, 2018
0.6.0 Oct 6, 2017

#257 in Game dev

Download history 1858/week @ 2023-11-09 2177/week @ 2023-11-16 1901/week @ 2023-11-23 1360/week @ 2023-11-30 1497/week @ 2023-12-07 2023/week @ 2023-12-14 1563/week @ 2023-12-21 1154/week @ 2023-12-28 1526/week @ 2024-01-04 2103/week @ 2024-01-11 2081/week @ 2024-01-18 1692/week @ 2024-01-25 1506/week @ 2024-02-01 2255/week @ 2024-02-08 2666/week @ 2024-02-15 2191/week @ 2024-02-22

8,948 downloads per month
Used in 113 crates (11 directly)

MIT/Apache

43KB
954 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