1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
//! # Eventsys
//!
//! A library for dispatching events and processing events. Events can be handled in a deferred and/or immediate way.
//!
//! Events can be:
//! * handled with an event listener: [`EventBackend::register_listener()`]
//! * be registered: [`EventBackend::register_store()`]
//!
//! To trigger a new event, call [`EventBackend::new_event()`].
//!
//! ## Using an [`EventBackend`]
//!
//! Using an [`EventBackend`] should generally be done in 2 phases:
//! * Create an new [`EventBackend`] and register all events
//! * Use the [`EventBackend`] to trigger new events
//!
//! Events can be triggered without needing mutable access to the [`EventBackend`],
//! while registering new event types does need mutable access.
//!
//! ## Listeners
//! The most direct method to handle events is registering a function to an event type and let this function be called when the corresponding
//! event is triggered.
//!
//! ### Example Listener
//!
//! ```rust
//! use eventsys::EventBackend;
//!
//! // create event system, events can be a max size of 16 bytes
//! let mut system = EventBackend::<16>::new();
//!
//! // create listener to be called on event trigger
//! let listener = |event: &u32| {
//! // handle event
//! };
//!
//! // register listener for event type
//! system.register_listener::<u32>(listener).unwrap();
//!
//! // trigger event
//! system.new_event::<u32>(123);
//! ```
//! ## Batching
//!
//! Sometimes it is not desired to process events right away. The second way to handle events is to store them
//! and proccess them as batch.
//!
//! ### Example Batching
//!
//! ```rust
//! use eventsys::{EventBackend, SlotType};
//!
//! // create event system, events can be a max size of 16 bytes
//! let mut system = EventBackend::<16>::new();
//!
//! // register listener for event type
//! system.register_store::<u32>(SlotType::All).unwrap();
//!
//! // trigger event
//! system.new_event::<u32>(123);
//! system.new_event::<u32>(456);
//! system.new_event::<u32>(789);
//!
//! // query batch
//! let event_iter = system.query::<u32>().unwrap();
//!
//! for event in event_iter {
//! // handle event
//! }
//! ```
//!
//!
//!
//!
const DEFAULT_EVENT_SIZE: usize = DEFAULT_THING_SIZE;
pub use EventBackend;
pub use SlotType;