pub struct BufRecvStream<S, B> { /* private fields */ }Available on crate feature
h3 only.Expand description
A stream which allows partial reading of the data without data loss.
This fixes the problem where poll_data returns more than the needed amount of bytes,
requiring correct implementations to hold on to that extra data and return it later.
§Usage
Implements quic::RecvStream which will first return buffered data, and then read from the
stream
Implementations§
Source§impl<S, B> BufRecvStream<S, B>
impl<S, B> BufRecvStream<S, B>
pub fn new(stream: S) -> BufRecvStream<S, B>
Source§impl<B, S> BufRecvStream<S, B>where
S: RecvStream,
impl<B, S> BufRecvStream<S, B>where
S: RecvStream,
Sourcepub fn poll_read(
&mut self,
cx: &mut Context<'_>,
) -> Poll<Result<bool, StreamErrorIncoming>>
pub fn poll_read( &mut self, cx: &mut Context<'_>, ) -> Poll<Result<bool, StreamErrorIncoming>>
Reads more data into the buffer, returning the number of bytes read.
Returns true if the end of the stream is reached.
Sourcepub fn take_chunk(&mut self, limit: usize) -> Option<Bytes>
pub fn take_chunk(&mut self, limit: usize) -> Option<Bytes>
Returns the next chunk of data from the stream
Return None when there is no more buffered data; use Self::poll_read.
Sourcepub fn has_remaining(&mut self) -> bool
pub fn has_remaining(&mut self) -> bool
Returns true if there is remaining buffered data
pub fn is_eos(&self) -> bool
Trait Implementations§
Source§impl<S, B> AsyncRead for BufRecvStream<S, B>where
B: Buf,
S: RecvStream,
impl<S, B> AsyncRead for BufRecvStream<S, B>where
B: Buf,
S: RecvStream,
Source§impl<S, B> AsyncRead for BufRecvStream<S, B>where
B: Buf,
S: RecvStream,
impl<S, B> AsyncRead for BufRecvStream<S, B>where
B: Buf,
S: RecvStream,
Source§impl<S, B> AsyncWrite for BufRecvStream<S, B>where
B: Buf,
S: SendStreamUnframed<B>,
impl<S, B> AsyncWrite for BufRecvStream<S, B>where
B: Buf,
S: SendStreamUnframed<B>,
Source§fn poll_write(
self: Pin<&mut BufRecvStream<S, B>>,
cx: &mut Context<'_>,
buf: &[u8],
) -> Poll<Result<usize, Error>>
fn poll_write( self: Pin<&mut BufRecvStream<S, B>>, cx: &mut Context<'_>, buf: &[u8], ) -> Poll<Result<usize, Error>>
Attempt to write bytes from
buf into the object. Read moreSource§fn poll_flush(
self: Pin<&mut BufRecvStream<S, B>>,
_: &mut Context<'_>,
) -> Poll<Result<(), Error>>
fn poll_flush( self: Pin<&mut BufRecvStream<S, B>>, _: &mut Context<'_>, ) -> Poll<Result<(), Error>>
Attempt to flush the object, ensuring that any buffered data reach
their destination. Read more
Source§impl<S, B> AsyncWrite for BufRecvStream<S, B>where
B: Buf,
S: SendStreamUnframed<B>,
impl<S, B> AsyncWrite for BufRecvStream<S, B>where
B: Buf,
S: SendStreamUnframed<B>,
Source§fn poll_write(
self: Pin<&mut BufRecvStream<S, B>>,
cx: &mut Context<'_>,
buf: &[u8],
) -> Poll<Result<usize, Error>>
fn poll_write( self: Pin<&mut BufRecvStream<S, B>>, cx: &mut Context<'_>, buf: &[u8], ) -> Poll<Result<usize, Error>>
Attempt to write bytes from
buf into the object. Read moreSource§fn poll_flush(
self: Pin<&mut BufRecvStream<S, B>>,
_: &mut Context<'_>,
) -> Poll<Result<(), Error>>
fn poll_flush( self: Pin<&mut BufRecvStream<S, B>>, _: &mut Context<'_>, ) -> Poll<Result<(), Error>>
Attempts to flush the object, ensuring that any buffered data reach
their destination. Read more
Source§fn poll_shutdown(
self: Pin<&mut BufRecvStream<S, B>>,
cx: &mut Context<'_>,
) -> Poll<Result<(), Error>>
fn poll_shutdown( self: Pin<&mut BufRecvStream<S, B>>, cx: &mut Context<'_>, ) -> Poll<Result<(), Error>>
Initiates or attempts to shut down this writer, returning success when
the I/O connection has completely shut down. Read more
Source§fn poll_write_vectored(
self: Pin<&mut Self>,
cx: &mut Context<'_>,
bufs: &[IoSlice<'_>],
) -> Poll<Result<usize, Error>>
fn poll_write_vectored( self: Pin<&mut Self>, cx: &mut Context<'_>, bufs: &[IoSlice<'_>], ) -> Poll<Result<usize, Error>>
Like
poll_write, except that it writes from a slice of buffers. Read moreSource§fn is_write_vectored(&self) -> bool
fn is_write_vectored(&self) -> bool
Determines if this writer has an efficient
poll_write_vectored
implementation. Read moreSource§impl<S, B> BidiStream<B> for BufRecvStream<S, B>where
B: Buf,
S: BidiStream<B>,
impl<S, B> BidiStream<B> for BufRecvStream<S, B>where
B: Buf,
S: BidiStream<B>,
Source§type SendStream = BufRecvStream<<S as BidiStream<B>>::SendStream, B>
type SendStream = BufRecvStream<<S as BidiStream<B>>::SendStream, B>
The type for the send half.
Source§type RecvStream = BufRecvStream<<S as BidiStream<B>>::RecvStream, B>
type RecvStream = BufRecvStream<<S as BidiStream<B>>::RecvStream, B>
The type for the receive half.
Source§fn split(
self,
) -> (<BufRecvStream<S, B> as BidiStream<B>>::SendStream, <BufRecvStream<S, B> as BidiStream<B>>::RecvStream)
fn split( self, ) -> (<BufRecvStream<S, B> as BidiStream<B>>::SendStream, <BufRecvStream<S, B> as BidiStream<B>>::RecvStream)
Split this stream into two halves.
Source§impl<S, B> Debug for BufRecvStream<S, B>
impl<S, B> Debug for BufRecvStream<S, B>
Source§impl<S, B> RecvStream for BufRecvStream<S, B>where
S: RecvStream,
impl<S, B> RecvStream for BufRecvStream<S, B>where
S: RecvStream,
Source§fn poll_data(
&mut self,
cx: &mut Context<'_>,
) -> Poll<Result<Option<<BufRecvStream<S, B> as RecvStream>::Buf>, StreamErrorIncoming>>
fn poll_data( &mut self, cx: &mut Context<'_>, ) -> Poll<Result<Option<<BufRecvStream<S, B> as RecvStream>::Buf>, StreamErrorIncoming>>
Poll the stream for more data. Read more
Source§fn stop_sending(&mut self, error_code: u64)
fn stop_sending(&mut self, error_code: u64)
Send a
STOP_SENDING QUIC code.Source§impl<S, B> SendStream<B> for BufRecvStream<S, B>where
B: Buf,
S: SendStream<B>,
impl<S, B> SendStream<B> for BufRecvStream<S, B>where
B: Buf,
S: SendStream<B>,
Source§fn poll_finish(
&mut self,
cx: &mut Context<'_>,
) -> Poll<Result<(), StreamErrorIncoming>>
fn poll_finish( &mut self, cx: &mut Context<'_>, ) -> Poll<Result<(), StreamErrorIncoming>>
Poll to finish the sending side of the stream.
Source§fn poll_ready(
&mut self,
cx: &mut Context<'_>,
) -> Poll<Result<(), StreamErrorIncoming>>
fn poll_ready( &mut self, cx: &mut Context<'_>, ) -> Poll<Result<(), StreamErrorIncoming>>
Polls if the stream can send more data.
Source§impl<S, B> SendStreamUnframed<B> for BufRecvStream<S, B>where
B: Buf,
S: SendStreamUnframed<B>,
impl<S, B> SendStreamUnframed<B> for BufRecvStream<S, B>where
B: Buf,
S: SendStreamUnframed<B>,
impl<'__pin, S, B> Unpin for BufRecvStream<S, B>where
<PinnedFieldsOfHelperStruct<__Origin<'__pin, S, B>> as PinnedFieldsOfHelperTrait>::Actual: Unpin,
Auto Trait Implementations§
impl<S, B> Freeze for BufRecvStream<S, B>where
S: Freeze,
impl<S, B> RefUnwindSafe for BufRecvStream<S, B>where
S: RefUnwindSafe,
B: RefUnwindSafe,
impl<S, B> Send for BufRecvStream<S, B>
impl<S, B> Sync for BufRecvStream<S, B>
impl<S, B> UnwindSafe for BufRecvStream<S, B>where
S: UnwindSafe,
B: UnwindSafe,
Blanket Implementations§
Source§impl<R> AsyncReadExt for R
impl<R> AsyncReadExt for R
Source§fn chain<R>(self, next: R) -> Chain<Self, R>
fn chain<R>(self, next: R) -> Chain<Self, R>
Creates an adaptor which will chain this stream with another. Read more
Source§fn read<'a>(&'a mut self, buf: &'a mut [u8]) -> Read<'a, Self>where
Self: Unpin,
fn read<'a>(&'a mut self, buf: &'a mut [u8]) -> Read<'a, Self>where
Self: Unpin,
Tries to read some bytes directly into the given
buf in asynchronous
manner, returning a future type. Read moreSource§fn read_vectored<'a>(
&'a mut self,
bufs: &'a mut [IoSliceMut<'a>],
) -> ReadVectored<'a, Self>where
Self: Unpin,
fn read_vectored<'a>(
&'a mut self,
bufs: &'a mut [IoSliceMut<'a>],
) -> ReadVectored<'a, Self>where
Self: Unpin,
Creates a future which will read from the
AsyncRead into bufs using vectored
IO operations. Read moreSource§fn read_exact<'a>(&'a mut self, buf: &'a mut [u8]) -> ReadExact<'a, Self>where
Self: Unpin,
fn read_exact<'a>(&'a mut self, buf: &'a mut [u8]) -> ReadExact<'a, Self>where
Self: Unpin,
Creates a future which will read exactly enough bytes to fill
buf,
returning an error if end of file (EOF) is hit sooner. Read moreSource§fn read_to_end<'a>(&'a mut self, buf: &'a mut Vec<u8>) -> ReadToEnd<'a, Self>where
Self: Unpin,
fn read_to_end<'a>(&'a mut self, buf: &'a mut Vec<u8>) -> ReadToEnd<'a, Self>where
Self: Unpin,
Creates a future which will read all the bytes from this
AsyncRead. Read moreSource§fn read_to_string<'a>(
&'a mut self,
buf: &'a mut String,
) -> ReadToString<'a, Self>where
Self: Unpin,
fn read_to_string<'a>(
&'a mut self,
buf: &'a mut String,
) -> ReadToString<'a, Self>where
Self: Unpin,
Creates a future which will read all the bytes from this
AsyncRead. Read moreSource§impl<W> AsyncWriteExt for Wwhere
W: AsyncWrite + ?Sized,
impl<W> AsyncWriteExt for Wwhere
W: AsyncWrite + ?Sized,
Source§fn flush(&mut self) -> Flush<'_, Self>where
Self: Unpin,
fn flush(&mut self) -> Flush<'_, Self>where
Self: Unpin,
Creates a future which will entirely flush this
AsyncWrite. Read moreSource§fn close(&mut self) -> Close<'_, Self>where
Self: Unpin,
fn close(&mut self) -> Close<'_, Self>where
Self: Unpin,
Creates a future which will entirely close this
AsyncWrite.Source§fn write<'a>(&'a mut self, buf: &'a [u8]) -> Write<'a, Self>where
Self: Unpin,
fn write<'a>(&'a mut self, buf: &'a [u8]) -> Write<'a, Self>where
Self: Unpin,
Creates a future which will write bytes from
buf into the object. Read moreSource§fn write_vectored<'a>(
&'a mut self,
bufs: &'a [IoSlice<'a>],
) -> WriteVectored<'a, Self>where
Self: Unpin,
fn write_vectored<'a>(
&'a mut self,
bufs: &'a [IoSlice<'a>],
) -> WriteVectored<'a, Self>where
Self: Unpin,
Creates a future which will write bytes from
bufs into the object using vectored
IO operations. Read moreSource§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
Mutably borrows from an owned value. Read more
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
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>
Converts
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>
Converts
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