1use crate::{interest::Interest, token::Token};
3
4#[derive(Debug, Clone, Copy, PartialEq, Eq)]
6pub struct Event {
7 token: Token,
8 readiness: Interest,
9}
10
11impl Event {
12 pub const fn new(token: Token, readiness: Interest) -> Self {
14 Self { token, readiness }
15 }
16
17 pub const fn token(&self) -> Token {
19 self.token
20 }
21
22 pub const fn readiness(&self) -> Interest {
24 self.readiness
25 }
26}
27
28#[derive(Debug, Default, Clone)]
30pub struct Events {
31 entries: Vec<Event>,
32}
33
34impl Events {
35 pub fn new() -> Self {
37 Self { entries: Vec::new() }
38 }
39
40 pub fn with_capacity(capacity: usize) -> Self {
42 Self {
43 entries: Vec::with_capacity(capacity),
44 }
45 }
46
47 pub fn len(&self) -> usize {
49 self.entries.len()
50 }
51
52 pub fn is_empty(&self) -> bool {
54 self.entries.is_empty()
55 }
56
57 pub fn clear(&mut self) {
59 self.entries.clear();
60 }
61
62 pub fn iter(&self) -> impl Iterator<Item = &Event> {
64 self.entries.iter()
65 }
66
67 pub fn push(&mut self, event: Event) {
69 self.entries.push(event);
70 }
71}
72
73impl IntoIterator for Events {
74 type Item = Event;
75 type IntoIter = std::vec::IntoIter<Event>;
76
77 fn into_iter(self) -> Self::IntoIter {
78 self.entries.into_iter()
79 }
80}
81
82impl<'a> IntoIterator for &'a Events {
83 type Item = &'a Event;
84 type IntoIter = std::slice::Iter<'a, Event>;
85
86 fn into_iter(self) -> Self::IntoIter {
87 self.entries.iter()
88 }
89}