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 CloseTriggerFrames 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 CloseTriggerFrames 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