pub struct PartialAsyncRead<R> { /* private fields */ }
Available on crate feature
futures03
only.Expand description
A wrapper that breaks inner AsyncRead
instances up according to the
provided iterator.
Available with the futures03
feature for futures
traits, and with the tokio1
feature for
tokio
traits.
§Examples
This example uses tokio
.
use partial_io::{PartialAsyncRead, PartialOp};
use std::io::{self, Cursor};
use tokio::io::AsyncReadExt;
#[tokio::main]
async fn main() -> io::Result<()> {
let reader = Cursor::new(vec![1, 2, 3, 4]);
// Sequential calls to `poll_read()` and the other `poll_` methods simulate the following behavior:
let iter = vec![
PartialOp::Err(io::ErrorKind::WouldBlock), // A not-ready state.
PartialOp::Limited(2), // Only allow 2 bytes to be read.
PartialOp::Err(io::ErrorKind::InvalidData), // Error from the underlying stream.
PartialOp::Unlimited, // Allow as many bytes to be read as possible.
];
let mut partial_reader = PartialAsyncRead::new(reader, iter);
let mut out = vec![0; 256];
// This causes poll_read to be called twice, yielding after the first call (WouldBlock).
assert_eq!(partial_reader.read(&mut out).await?, 2, "first read with Limited(2)");
assert_eq!(&out[..4], &[1, 2, 0, 0]);
// This next call returns an error.
assert_eq!(
partial_reader.read(&mut out[2..]).await.unwrap_err().kind(),
io::ErrorKind::InvalidData,
);
// And this one causes the last two bytes to be written.
assert_eq!(partial_reader.read(&mut out[2..]).await?, 2, "second read with Unlimited");
assert_eq!(&out[..4], &[1, 2, 3, 4]);
Ok(())
}
Implementations§
Source§impl<R> PartialAsyncRead<R>
impl<R> PartialAsyncRead<R>
Sourcepub fn new<I>(inner: R, iter: I) -> Self
pub fn new<I>(inner: R, iter: I) -> Self
Creates a new PartialAsyncRead
wrapper over the reader with the specified PartialOp
s.
Sourcepub fn pin_set_ops<I>(self: Pin<&mut Self>, iter: I) -> Pin<&mut Self>
pub fn pin_set_ops<I>(self: Pin<&mut Self>, iter: I) -> Pin<&mut Self>
Sets the PartialOp
s for this reader in a pinned context.
Sourcepub fn pin_get_mut(self: Pin<&mut Self>) -> Pin<&mut R>
pub fn pin_get_mut(self: Pin<&mut Self>) -> Pin<&mut R>
Returns a pinned mutable reference to the underlying reader.
Sourcepub fn into_inner(self) -> R
pub fn into_inner(self) -> R
Consumes this wrapper, returning the underlying reader.
Trait Implementations§
Source§impl<R> AsyncBufRead for PartialAsyncRead<R>where
R: AsyncBufRead,
impl<R> AsyncBufRead for PartialAsyncRead<R>where
R: AsyncBufRead,
Source§impl<R> AsyncBufRead for PartialAsyncRead<R>where
R: AsyncBufRead,
Available on crate feature tokio1
only.
impl<R> AsyncBufRead for PartialAsyncRead<R>where
R: AsyncBufRead,
Available on crate feature
tokio1
only.Source§impl<R> AsyncRead for PartialAsyncRead<R>where
R: AsyncRead,
impl<R> AsyncRead for PartialAsyncRead<R>where
R: AsyncRead,
Source§impl<R> AsyncRead for PartialAsyncRead<R>where
R: AsyncRead,
Available on crate feature tokio1
only.
impl<R> AsyncRead for PartialAsyncRead<R>where
R: AsyncRead,
Available on crate feature
tokio1
only.Source§impl<R> AsyncSeek for PartialAsyncRead<R>where
R: AsyncSeek,
This is a forwarding impl to support duplex structs.
impl<R> AsyncSeek for PartialAsyncRead<R>where
R: AsyncSeek,
This is a forwarding impl to support duplex structs.
Source§impl<R> AsyncSeek for PartialAsyncRead<R>where
R: AsyncSeek,
Available on crate feature tokio1
only.This is a forwarding impl to support duplex structs.
impl<R> AsyncSeek for PartialAsyncRead<R>where
R: AsyncSeek,
Available on crate feature
tokio1
only.This is a forwarding impl to support duplex structs.
Source§impl<R> AsyncWrite for PartialAsyncRead<R>where
R: AsyncWrite,
This is a forwarding impl to support duplex structs.
impl<R> AsyncWrite for PartialAsyncRead<R>where
R: AsyncWrite,
This is a forwarding impl to support duplex structs.
Source§fn poll_write(
self: Pin<&mut Self>,
cx: &mut Context<'_>,
buf: &[u8],
) -> Poll<Result<usize>>
fn poll_write( self: Pin<&mut Self>, cx: &mut Context<'_>, buf: &[u8], ) -> Poll<Result<usize>>
Attempt to write bytes from
buf
into the object. Read moreSource§fn poll_flush(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Result<()>>
fn poll_flush(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Result<()>>
Attempt to flush the object, ensuring that any buffered data reach
their destination. Read more
Source§impl<R> AsyncWrite for PartialAsyncRead<R>where
R: AsyncWrite,
Available on crate feature tokio1
only.This is a forwarding impl to support duplex structs.
impl<R> AsyncWrite for PartialAsyncRead<R>where
R: AsyncWrite,
Available on crate feature
tokio1
only.This is a forwarding impl to support duplex structs.
Source§fn poll_write(
self: Pin<&mut Self>,
cx: &mut Context<'_>,
buf: &[u8],
) -> Poll<Result<usize>>
fn poll_write( self: Pin<&mut Self>, cx: &mut Context<'_>, buf: &[u8], ) -> Poll<Result<usize>>
Attempt to write bytes from
buf
into the object. Read moreSource§fn poll_flush(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Result<()>>
fn poll_flush(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Result<()>>
Attempts to flush the object, ensuring that any buffered data reach
their destination. Read more
Source§fn poll_shutdown(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Result<()>>
fn poll_shutdown(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Result<()>>
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<R> Debug for PartialAsyncRead<R>where
R: Debug,
impl<R> Debug for PartialAsyncRead<R>where
R: Debug,
impl<'pin, R> Unpin for PartialAsyncRead<R>where
PinnedFieldsOf<__PartialAsyncRead<'pin, R>>: Unpin,
Auto Trait Implementations§
impl<R> Freeze for PartialAsyncRead<R>where
R: Freeze,
impl<R> !RefUnwindSafe for PartialAsyncRead<R>
impl<R> Send for PartialAsyncRead<R>where
R: Send,
impl<R> !Sync for PartialAsyncRead<R>
impl<R> !UnwindSafe for PartialAsyncRead<R>
Blanket Implementations§
Source§impl<R> AsyncBufReadExt for Rwhere
R: AsyncBufRead + ?Sized,
impl<R> AsyncBufReadExt for Rwhere
R: AsyncBufRead + ?Sized,
Source§fn fill_buf(&mut self) -> FillBuf<'_, Self>where
Self: Unpin,
fn fill_buf(&mut self) -> FillBuf<'_, Self>where
Self: Unpin,
Creates a future which will wait for a non-empty buffer to be available from this I/O
object or EOF to be reached. Read more
Source§fn consume_unpin(&mut self, amt: usize)where
Self: Unpin,
fn consume_unpin(&mut self, amt: usize)where
Self: Unpin,
Source§fn read_until<'a>(
&'a mut self,
byte: u8,
buf: &'a mut Vec<u8>,
) -> ReadUntil<'a, Self>where
Self: Unpin,
fn read_until<'a>(
&'a mut self,
byte: u8,
buf: &'a mut Vec<u8>,
) -> ReadUntil<'a, Self>where
Self: Unpin,
Creates a future which will read all the bytes associated with this I/O
object into
buf
until the delimiter byte
or EOF is reached.
This method is the async equivalent to BufRead::read_until
. Read moreSource§fn read_line<'a>(&'a mut self, buf: &'a mut String) -> ReadLine<'a, Self>where
Self: Unpin,
fn read_line<'a>(&'a mut self, buf: &'a mut String) -> ReadLine<'a, Self>where
Self: Unpin,
Creates a future which will read all the bytes associated with this I/O
object into
buf
until a newline (the 0xA byte) or EOF is reached,
This method is the async equivalent to BufRead::read_line
. Read moreSource§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<S> AsyncSeekExt for S
impl<S> AsyncSeekExt for S
Source§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