pub trait StreamExt: Stream {
// Provided method
fn next_event(
&mut self,
wanted_event_types: EventTypeFlags,
) -> NextEvent<'_, Self>
where Self: Unpin { ... }
}
Expand description
An extension trait for the [Stream
] trait.
If you need utilities from multiple StreamExt
traits, underscore import
this one.
Provided Methods§
Sourcefn next_event(
&mut self,
wanted_event_types: EventTypeFlags,
) -> NextEvent<'_, Self>where
Self: Unpin,
fn next_event(
&mut self,
wanted_event_types: EventTypeFlags,
) -> NextEvent<'_, Self>where
Self: Unpin,
Consumes and returns the next wanted Event
in the stream or None
if the stream is finished.
next_event()
takes a EventTypeFlags
which is then passed along to
parse
. Unwanted event types are skipped.
Close messages are always considered wanted and map onto
Event::GatewayClose
.
Equivalent to:
async fn next_event(&mut self, wanted_event_types: EventTypeFlags) -> Option<Result<Event, ReceiveMessageError>>
Note that because next_event
doesn’t take ownership over the stream,
the [Stream
] type must be Unpin
. If you want to use next
with a
!Unpin
stream, you’ll first have to pin the stream. This
can be done by boxing the stream using Box::pin
or pinning it to
the stack using pin!
.
§Cancel safety
This method is cancel safe. The returned future only holds onto a reference to the underlying stream, so dropping it will never lose a value.
§Example
use twilight_gateway::{Event, EventTypeFlags, StreamExt as _};
while let Some(item) = shard.next_event(EventTypeFlags::all()).await {
let Ok(event) = item else {
tracing::warn!(source = ?item.unwrap_err(), "error receiving event");
continue;
};
match event {
Event::Ready(_) => tracing::info!("ready!"),
_ => {}
}
}
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.