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}