pub struct Reader(/* private fields */);
Expand description
Read half of a stream. See stream()
.
Implementations§
Source§impl Reader
impl Reader
Sourcepub fn inspect_shutdown(&self) -> String
pub fn inspect_shutdown(&self) -> String
Debug
Sourcepub async fn read<F, U>(&self, size: usize, f: F) -> Result<U>
pub async fn read<F, U>(&self, size: usize, f: F) -> Result<U>
Read bytes from the stream.
The reader will wait until there are at least size
bytes to read,
Then it will call the given callback with a slice containing all
available bytes to read.
If the callback processes data successfully, it should return Ok
with
a tuple containing a value of the user’s choice, and the number of bytes
used. If the number of bytes returned from the callback is less than
what was available in the buffer, the unused bytes will appear at the
start of the buffer for subsequent read calls. It is allowable to peek
at the bytes in the buffer by returning a number of bytes read that is
smaller than the number of bytes actually used.
If the callback returns Error::BufferTooShort
and the expected buffer
value contained in the error is larger than the data that was provided,
we will wait again until there are enough bytes to satisfy the error and
then call the callback again. If the callback returns
Error::BufferTooShort
but the buffer should have been long enough
according to the error, Error::CallbackRejectedBuffer
is returned.
Other errors from the callback are returned as-is from read
itself.
If there are no bytes available to read and the Writer
for this stream
has already been dropped, read
returns Error::ConnectionClosed
. If
there are not enough bytes available to be read and the Writer
has
been dropped, read
returns Error::BufferTooSmall
. This is the only
time read
should return Error::BufferTooSmall
.
Panics if the callback returns a number of bytes greater than the size of the buffer.
Sourcepub fn poll_read<F, U>(
&self,
ctx: &mut Context<'_>,
size: &mut usize,
f: F,
) -> Poll<Result<U>>
pub fn poll_read<F, U>( &self, ctx: &mut Context<'_>, size: &mut usize, f: F, ) -> Poll<Result<U>>
Like read
but a poll function rather than a future. Passes the
Context
to the callback so the callback can also poll.
The size
argument is a mutable reference so that if we determine
during reading that more data is needed, we can update the size. It
should always increase. The value of size
is not meaningful after
returning Poll::Ready
.
Sourcepub async fn read_protocol_message<P: ProtocolMessage>(&self) -> Result<P>
pub async fn read_protocol_message<P: ProtocolMessage>(&self) -> Result<P>
Read a protocol message from the stream. This is just a quick way to wire
ProtocolObject::try_from_bytes
in to read
.
Sourcepub fn is_closed(&self) -> bool
pub fn is_closed(&self) -> bool
Whether this stream is closed. Returns false so long as there is unread data in the buffer, even if the writer has hung up.
Sourcepub fn closed_reason(&self) -> Option<String>
pub fn closed_reason(&self) -> Option<String>
Get the reason this reader is closed. If the reader is not closed, or if
no reason was given, return None
.