#![allow(clippy::wildcard_imports)]
use crate::EventTypeFlags;
use futures_channel::mpsc::UnboundedReceiver;
use futures_util::stream::{Stream, StreamExt};
use std::{
pin::Pin,
task::{Context, Poll},
};
use twilight_model::gateway::event::Event;
pub struct Events {
event_types: EventTypeFlags,
rx: UnboundedReceiver<Event>,
}
impl Events {
pub(super) fn new(event_types: EventTypeFlags, rx: UnboundedReceiver<Event>) -> Self {
Self { event_types, rx }
}
pub 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_next_unpin(cx)
}
}
#[cfg(test)]
mod tests {
use super::Events;
use futures_util::stream::Stream;
use static_assertions::assert_impl_all;
assert_impl_all!(Events: Send, Stream, Sync);
}