pub struct PartialAsyncWrite<W> { /* private fields */ }
futures03
only.Expand description
A wrapper that breaks inner AsyncWrite
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::{PartialAsyncWrite, PartialOp};
use std::io::{self, Cursor};
use tokio::io::AsyncWriteExt;
#[tokio::main]
async fn main() -> io::Result<()> {
let writer = Cursor::new(Vec::new());
// Sequential calls to `poll_write()` 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 written.
PartialOp::Err(io::ErrorKind::InvalidData), // Error from the underlying stream.
PartialOp::Unlimited, // Allow as many bytes to be written as possible.
];
let mut partial_writer = PartialAsyncWrite::new(writer, iter);
let in_data = vec![1, 2, 3, 4];
// This causes poll_write to be called twice, yielding after the first call (WouldBlock).
assert_eq!(partial_writer.write(&in_data).await?, 2);
let cursor_ref = partial_writer.get_ref();
let out = cursor_ref.get_ref();
assert_eq!(&out[..], &[1, 2]);
// This next call returns an error.
assert_eq!(
partial_writer.write(&in_data[2..]).await.unwrap_err().kind(),
io::ErrorKind::InvalidData,
);
// And this one causes the last two bytes to be written.
assert_eq!(partial_writer.write(&in_data[2..]).await?, 2);
let cursor_ref = partial_writer.get_ref();
let out = cursor_ref.get_ref();
assert_eq!(&out[..], &[1, 2, 3, 4]);
Ok(())
}
Implementations§
Source§impl<W> PartialAsyncWrite<W>
impl<W> PartialAsyncWrite<W>
Sourcepub fn new<I>(inner: W, iter: I) -> Self
pub fn new<I>(inner: W, iter: I) -> Self
Creates a new PartialAsyncWrite
wrapper over the writer 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 writer in a pinned context.
Sourcepub fn pin_get_mut(self: Pin<&mut Self>) -> Pin<&mut W>
pub fn pin_get_mut(self: Pin<&mut Self>) -> Pin<&mut W>
Returns a pinned mutable reference to the underlying writer.
Sourcepub fn into_inner(self) -> W
pub fn into_inner(self) -> W
Consumes this wrapper, returning the underlying writer.
Trait Implementations§
Source§impl<W> AsyncBufRead for PartialAsyncWrite<W>where
W: AsyncBufRead,
This is a forwarding impl to support duplex structs.
impl<W> AsyncBufRead for PartialAsyncWrite<W>where
W: AsyncBufRead,
This is a forwarding impl to support duplex structs.
Source§impl<W> AsyncBufRead for PartialAsyncWrite<W>where
W: AsyncBufRead,
Available on crate feature tokio1
only.This is a forwarding impl to support duplex structs.
impl<W> AsyncBufRead for PartialAsyncWrite<W>where
W: AsyncBufRead,
tokio1
only.This is a forwarding impl to support duplex structs.
Source§impl<W> AsyncRead for PartialAsyncWrite<W>where
W: AsyncRead,
This is a forwarding impl to support duplex structs.
impl<W> AsyncRead for PartialAsyncWrite<W>where
W: AsyncRead,
This is a forwarding impl to support duplex structs.
Source§impl<W> AsyncRead for PartialAsyncWrite<W>where
W: AsyncRead,
Available on crate feature tokio1
only.This is a forwarding impl to support duplex structs.
impl<W> AsyncRead for PartialAsyncWrite<W>where
W: AsyncRead,
tokio1
only.This is a forwarding impl to support duplex structs.
Source§impl<W> AsyncSeek for PartialAsyncWrite<W>where
W: AsyncSeek,
This is a forwarding impl to support duplex structs.
impl<W> AsyncSeek for PartialAsyncWrite<W>where
W: AsyncSeek,
This is a forwarding impl to support duplex structs.
Source§impl<W> AsyncSeek for PartialAsyncWrite<W>where
W: AsyncSeek,
Available on crate feature tokio1
only.This is a forwarding impl to support duplex structs.
impl<W> AsyncSeek for PartialAsyncWrite<W>where
W: AsyncSeek,
tokio1
only.This is a forwarding impl to support duplex structs.
Source§impl<W> AsyncWrite for PartialAsyncWrite<W>where
W: AsyncWrite,
impl<W> AsyncWrite for PartialAsyncWrite<W>where
W: AsyncWrite,
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>>
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<()>>
Source§impl<W> AsyncWrite for PartialAsyncWrite<W>where
W: AsyncWrite,
Available on crate feature tokio1
only.
impl<W> AsyncWrite for PartialAsyncWrite<W>where
W: AsyncWrite,
tokio1
only.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>>
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<()>>
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<()>>
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>>
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
poll_write_vectored
implementation. Read moreSource§impl<W> Debug for PartialAsyncWrite<W>where
W: Debug,
impl<W> Debug for PartialAsyncWrite<W>where
W: Debug,
impl<'pin, W> Unpin for PartialAsyncWrite<W>where
PinnedFieldsOf<__PartialAsyncWrite<'pin, W>>: Unpin,
Auto Trait Implementations§
impl<W> Freeze for PartialAsyncWrite<W>where
W: Freeze,
impl<W> !RefUnwindSafe for PartialAsyncWrite<W>
impl<W> Send for PartialAsyncWrite<W>where
W: Send,
impl<W> !Sync for PartialAsyncWrite<W>
impl<W> !UnwindSafe for PartialAsyncWrite<W>
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,
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,
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,
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>
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,
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,
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,
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,
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,
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,
AsyncWrite
. Read moreSource§fn close(&mut self) -> Close<'_, Self>where
Self: Unpin,
fn close(&mut self) -> Close<'_, Self>where
Self: Unpin,
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,
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,
bufs
into the object using vectored
IO operations. Read more