use crate::EventSink;
use crate::api::SocketEvent;
use std::collections::VecDeque;
pub struct Events {
events: VecDeque<SocketEvent>,
}
impl Events {
pub fn new() -> Self {
Self { events: VecDeque::new() }
}
pub fn next_event(&mut self) -> Option<SocketEvent> {
self.events.pop_front()
}
}
impl EventSink for Events {
fn add(&mut self, event: SocketEvent) {
self.events.push_back(event);
}
fn next_event(&mut self) -> Option<SocketEvent> {
self.events.pop_front()
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::api::LifecycleId;
use crate::testing::event_helpers::expect_no_event;
use crate::testing::event_helpers::expect_on_connected;
use crate::testing::event_helpers::expect_on_lifecycle_message_fully_sent;
#[test]
fn can_enqueue_and_match_events() {
let mut events = Events::new();
events.add(SocketEvent::OnConnected());
events.add(SocketEvent::OnLifecycleMessageFullySent(LifecycleId::from(123)));
expect_on_connected!(events.next_event());
assert_eq!(
expect_on_lifecycle_message_fully_sent!(events.next_event()),
LifecycleId::from(123)
);
expect_no_event!(events.next_event());
}
}