pub struct StreamMap { /* private fields */ }
Expand description
A read-only aggregation of frames received over a connection, mapped to the stream ID over which they were received.
StreamMap
also contains the CloseTriggerFrames
for the connection so
that its state can be updated as new frames are received.
Implementations§
Source§impl StreamMap
impl StreamMap
Sourcepub fn all_frames(&self) -> Vec<H3iFrame>
pub fn all_frames(&self) -> Vec<H3iFrame>
Flatten all received frames into a single vector. The ordering is non-deterministic.
§Example
use h3i::client::connection_summary::StreamMap;
use h3i::frame::EnrichedHeaders;
use h3i::frame::H3iFrame;
use quiche::h3::Header;
use std::iter::FromIterator;
let h = Header::new(b"hello", b"world");
let headers = H3iFrame::Headers(EnrichedHeaders::from(vec![h]));
let stream_map: StreamMap = [(0, vec![headers.clone()])].into();
assert_eq!(stream_map.all_frames(), vec![headers]);
Sourcepub fn stream(&self, stream_id: u64) -> Vec<H3iFrame>
pub fn stream(&self, stream_id: u64) -> Vec<H3iFrame>
Get all frames on a given stream_id
.
§Example
use h3i::client::connection_summary::StreamMap;
use h3i::frame::EnrichedHeaders;
use h3i::frame::H3iFrame;
use quiche::h3::Header;
use std::iter::FromIterator;
let mut stream_map = StreamMap::default();
let h = Header::new(b"hello", b"world");
let headers = H3iFrame::Headers(EnrichedHeaders::from(vec![h]));
let stream_map: StreamMap = [(0, vec![headers.clone()])].into();
assert_eq!(stream_map.stream(0), vec![headers]);
Sourcepub fn received_frame(&self, frame: &H3iFrame) -> bool
pub fn received_frame(&self, frame: &H3iFrame) -> bool
Check if a provided H3iFrame
was received, regardless of what stream
it was received on.
§Example
use h3i::client::connection_summary::StreamMap;
use h3i::frame::EnrichedHeaders;
use h3i::frame::H3iFrame;
use quiche::h3::Header;
use std::iter::FromIterator;
let h = Header::new(b"hello", b"world");
let headers = H3iFrame::Headers(EnrichedHeaders::from(vec![h]));
let stream_map: StreamMap = [(0, vec![headers.clone()])].into();
assert!(stream_map.received_frame(&headers));
Sourcepub fn received_frame_on_stream(&self, stream: u64, frame: &H3iFrame) -> bool
pub fn received_frame_on_stream(&self, stream: u64, frame: &H3iFrame) -> bool
Check if a provided H3iFrame
was received over a specified stream.
§Example
use h3i::client::connection_summary::StreamMap;
use h3i::frame::EnrichedHeaders;
use h3i::frame::H3iFrame;
use quiche::h3::Header;
use std::iter::FromIterator;
let h = Header::new(b"hello", b"world");
let headers = H3iFrame::Headers(EnrichedHeaders::from(vec![h]));
let stream_map: StreamMap = [(0, vec![headers.clone()])].into();
assert!(stream_map.received_frame_on_stream(0, &headers));
Sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
Check if the stream map is empty, e.g., no frames were received.
§Example
use h3i::client::connection_summary::StreamMap;
use h3i::frame::EnrichedHeaders;
use h3i::frame::H3iFrame;
use quiche::h3::Header;
use std::iter::FromIterator;
let mut stream_map = StreamMap::default();
assert!(stream_map.is_empty());
let h = Header::new(b"hello", b"world");
let headers = H3iFrame::Headers(EnrichedHeaders::from(vec![h]));
let stream_map: StreamMap = [(0, vec![headers.clone()])].into();
assert!(!stream_map.is_empty());
Sourcepub fn headers_on_stream(&self, stream_id: u64) -> Vec<EnrichedHeaders>
pub fn headers_on_stream(&self, stream_id: u64) -> Vec<EnrichedHeaders>
See all HEADERS received on a given stream.
§Example
use h3i::client::connection_summary::StreamMap;
use h3i::frame::EnrichedHeaders;
use h3i::frame::H3iFrame;
use quiche::h3::Header;
use std::iter::FromIterator;
let h = Header::new(b"hello", b"world");
let enriched = EnrichedHeaders::from(vec![h]);
let headers = H3iFrame::Headers(enriched.clone());
let data = H3iFrame::QuicheH3(quiche::h3::frame::Frame::Data {
payload: b"hello world".to_vec(),
});
let stream_map: StreamMap = [(0, vec![headers.clone(), data.clone()])].into();
assert_eq!(stream_map.headers_on_stream(0), vec![enriched]);
Sourcepub fn all_close_trigger_frames_seen(&self) -> bool
pub fn all_close_trigger_frames_seen(&self) -> bool
If all CloseTriggerFrame
s were seen. If no triggers were expected,
this will return false
.
Sourcepub fn missing_close_trigger_frames(&self) -> Option<Vec<CloseTriggerFrame>>
pub fn missing_close_trigger_frames(&self) -> Option<Vec<CloseTriggerFrame>>
The set of all CloseTriggerFrame
s that were not seen on the
connection. Returns None
if
Trait Implementations§
Auto Trait Implementations§
impl Freeze for StreamMap
impl !RefUnwindSafe for StreamMap
impl Send for StreamMap
impl Sync for StreamMap
impl Unpin for StreamMap
impl !UnwindSafe for StreamMap
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more