use crate::EventTypeFlags;
use futures_util::stream::Stream;
use std::{
pin::Pin,
task::{Context, Poll},
};
use tokio::sync::mpsc::UnboundedReceiver;
use twilight_model::gateway::event::Event;
#[derive(Debug)]
pub struct Events {
event_types: EventTypeFlags,
rx: UnboundedReceiver<Event>,
}
impl Events {
pub(super) const fn new(event_types: EventTypeFlags, rx: UnboundedReceiver<Event>) -> Self {
Self { event_types, rx }
}
pub const fn event_types(&self) -> EventTypeFlags {
self.event_types
}
}
impl Stream for Events {
type Item = Event;
fn poll_next(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Option<Self::Item>> {
self.rx.poll_recv(cx)
}
}
#[cfg(test)]
mod tests {
use super::Events;
use futures_util::stream::Stream;
use static_assertions::assert_impl_all;
use std::fmt::Debug;
assert_impl_all!(Events: Debug, Send, Stream, Sync);
}