1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
#![allow(clippy::wildcard_imports)] //! Events that the shard emits to event streams. //! //! Included is the larger [`Event`] exposed to event streams. It contains //! variants with all of the possible events that can come in: new channels, //! heartbeat acknowledgements, "meta" events of when the shard disconnects or //! connects, etc. //! //! Also included is the [`EventType`] bitflags, which can be used to identify //! the type of an event and to filter events from event streams via //! [`Shard::some_events`]. //! //! [`Event`]: enum.Event.html //! [`EventType`]: ../struct.EventType.html //! [`Shard::some_events`]: ../struct.Shard.html#method.some_events 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; /// A stream of events from a [`Shard`]. /// /// The events of this stream may or may not be filtered. You can check the /// event types returned by [`Events::event_types`] to see what events can come /// in through this stream. /// /// [`Events::event_types`]: #method.event_types /// [`Shard`]: ../struct.Shard.html 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 } } /// Returns the event types that can be passed to this stream. 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) } }