1pub use self::ty::*;
2
3use crate::lock::{Mutex, MutexGuard};
4use alloc::collections::btree_map::BTreeMap;
5
6mod ty;
7
8pub struct EventSet<S>(Mutex<S>); impl<S> EventSet<S> {
16 pub fn trigger(&self) -> EventTrigger<S> {
17 EventTrigger(self.0.lock())
18 }
19}
20
21impl<S: Default> Default for EventSet<S> {
22 fn default() -> Self {
23 Self(Mutex::default())
24 }
25}
26
27pub struct Event<T: EventType> {
31 subscribers: BTreeMap<(u32, u64), T::Wrapper>, }
33
34impl<T: EventType> Default for Event<T> {
35 fn default() -> Self {
36 Self {
37 subscribers: BTreeMap::new(),
38 }
39 }
40}
41
42pub struct EventTrigger<'a, S>(MutexGuard<'a, S>);
47
48impl<S> EventTrigger<'_, S> {
49 pub fn select<E, T>(&mut self, event: E) -> impl Iterator<Item = &T::Wrapper>
50 where
51 E: FnOnce(&S) -> &Event<T>,
52 T: EventType,
53 {
54 event(&self.0).subscribers.values()
55 }
56}