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