okee_wheel_timer/event.rs
1/// Unique identifier of an event inside a wheel instance.
2///
3/// IDs are assigned by [`HashedWheelTimer::schedule`](crate::HashedWheelTimer::schedule)
4/// and preserved by update/reschedule operations.
5pub type EventId = u64;
6
7/// A scheduled event stored in the wheel.
8///
9/// `Event` values are returned by read/pop/remove operations.
10/// They carry metadata used by the wheel scheduler:
11/// - [`tick`](Self::tick): absolute tick when the event can be processed.
12/// - [`delta_tick`](Self::delta_tick): wave index within the same `tick`.
13///
14/// # Example
15/// ```
16/// use okee_wheel_timer::HashedWheelTimer;
17///
18/// let mut wheel = HashedWheelTimer::new(8);
19/// let id = wheel.schedule(0, "payload").id;
20///
21/// let events = wheel.pop_events();
22/// assert_eq!(events[0].id(), id);
23/// assert_eq!(events[0].tick(), 0);
24/// assert_eq!(events[0].data(), &"payload");
25/// ```
26#[derive(Debug, Clone, Copy)]
27pub struct Event<T> {
28 id: EventId,
29 tick: u64,
30 delta_tick: u64,
31 data: T,
32}
33
34impl<T> Event<T> {
35 pub(crate) fn new(id: EventId, tick: u64, delta_tick: u64, data: T) -> Self {
36 Self {
37 id,
38 tick,
39 delta_tick,
40 data,
41 }
42 }
43
44 /// Returns the unique ID of this event.
45 pub fn id(&self) -> EventId {
46 self.id
47 }
48
49 /// Returns the absolute tick when this event becomes available.
50 pub fn tick(&self) -> u64 {
51 self.tick
52 }
53
54 /// Returns the wave number inside [`tick`](Self::tick).
55 ///
56 /// Events with the same `(tick, delta_tick)` are popped together.
57 pub fn delta_tick(&self) -> u64 {
58 self.delta_tick
59 }
60
61 /// Returns a shared reference to the payload.
62 pub fn data(&self) -> &T {
63 &self.data
64 }
65
66 /// Consumes the event and returns its payload.
67 pub fn into_data(self) -> T {
68 self.data
69 }
70}