[−][src]Struct partial_io::PartialAsyncWrite 
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
impl<W> PartialAsyncWrite<W>[src]
pub fn new<I>(inner: W, iter: I) -> Self where
    I: IntoIterator<Item = PartialOp> + 'static,
    I::IntoIter: Send, [src]
I: IntoIterator<Item = PartialOp> + 'static,
I::IntoIter: Send,
Creates a new PartialAsyncWrite wrapper over the writer with the specified PartialOps.
pub fn set_ops<I>(&mut self, iter: I) -> &mut Self where
    I: IntoIterator<Item = PartialOp> + 'static,
    I::IntoIter: Send, [src]
I: IntoIterator<Item = PartialOp> + 'static,
I::IntoIter: Send,
Sets the PartialOps for this writer.
pub fn pin_set_ops<I>(self: Pin<&mut Self>, iter: I) -> Pin<&mut Self> where
    I: IntoIterator<Item = PartialOp> + 'static,
    I::IntoIter: Send, [src]
I: IntoIterator<Item = PartialOp> + 'static,
I::IntoIter: Send,
Sets the PartialOps for this writer in a pinned context.
pub fn get_ref(&self) -> &W[src]
Returns a shared reference to the underlying writer.
pub fn get_mut(&mut self) -> &mut W[src]
Returns a mutable reference to the underlying writer.
pub fn pin_get_mut(self: Pin<&mut Self>) -> Pin<&mut W>[src]
Returns a pinned mutable reference to the underlying writer.
pub fn into_inner(self) -> W[src]
Consumes this wrapper, returning the underlying writer.
Trait Implementations
impl<W> AsyncBufRead for PartialAsyncWrite<W> where
    W: AsyncBufRead, [src]
W: AsyncBufRead,
This is a forwarding impl to support duplex structs.
fn poll_fill_buf(
    self: Pin<&mut Self>, 
    cx: &mut Context<'_>
) -> Poll<Result<&[u8]>>[src]
self: Pin<&mut Self>,
cx: &mut Context<'_>
) -> Poll<Result<&[u8]>>
fn consume(self: Pin<&mut Self>, amt: usize)[src]
impl<W> AsyncBufRead for PartialAsyncWrite<W> where
    W: AsyncBufRead, [src]
W: AsyncBufRead,
This is a forwarding impl to support duplex structs.
fn poll_fill_buf(
    self: Pin<&mut Self>, 
    cx: &mut Context<'_>
) -> Poll<Result<&[u8]>>[src]
self: Pin<&mut Self>,
cx: &mut Context<'_>
) -> Poll<Result<&[u8]>>
fn consume(self: Pin<&mut Self>, amt: usize)[src]
impl<W> AsyncRead for PartialAsyncWrite<W> where
    W: AsyncRead, [src]
W: AsyncRead,
This is a forwarding impl to support duplex structs.
fn poll_read(
    self: Pin<&mut Self>, 
    cx: &mut Context<'_>, 
    buf: &mut [u8]
) -> Poll<Result<usize>>[src]
self: Pin<&mut Self>,
cx: &mut Context<'_>,
buf: &mut [u8]
) -> Poll<Result<usize>>
fn poll_read_vectored(
    self: Pin<&mut Self>, 
    cx: &mut Context<'_>, 
    bufs: &mut [IoSliceMut<'_>]
) -> Poll<Result<usize>>[src]
self: Pin<&mut Self>,
cx: &mut Context<'_>,
bufs: &mut [IoSliceMut<'_>]
) -> Poll<Result<usize>>
impl<W> AsyncRead for PartialAsyncWrite<W> where
    W: AsyncRead, [src]
W: AsyncRead,
This is a forwarding impl to support duplex structs.
fn poll_read(
    self: Pin<&mut Self>, 
    cx: &mut Context<'_>, 
    buf: &mut ReadBuf<'_>
) -> Poll<Result<()>>[src]
self: Pin<&mut Self>,
cx: &mut Context<'_>,
buf: &mut ReadBuf<'_>
) -> Poll<Result<()>>
impl<W> AsyncSeek for PartialAsyncWrite<W> where
    W: AsyncSeek, [src]
W: AsyncSeek,
This is a forwarding impl to support duplex structs.
impl<W> AsyncSeek for PartialAsyncWrite<W> where
    W: AsyncSeek, [src]
W: AsyncSeek,
This is a forwarding impl to support duplex structs.
fn start_seek(self: Pin<&mut Self>, position: SeekFrom) -> Result<()>[src]
fn poll_complete(
    self: Pin<&mut Self>, 
    cx: &mut Context<'_>
) -> Poll<Result<u64>>[src]
self: Pin<&mut Self>,
cx: &mut Context<'_>
) -> Poll<Result<u64>>
impl<W> AsyncWrite for PartialAsyncWrite<W> where
    W: AsyncWrite, [src]
W: AsyncWrite,
fn poll_write(
    self: Pin<&mut Self>, 
    cx: &mut Context<'_>, 
    buf: &[u8]
) -> Poll<Result<usize>>[src]
self: Pin<&mut Self>,
cx: &mut Context<'_>,
buf: &[u8]
) -> Poll<Result<usize>>
fn poll_flush(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Result<()>>[src]
fn poll_close(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Result<()>>[src]
pub fn poll_write_vectored(
    self: Pin<&mut Self>, 
    cx: &mut Context<'_>, 
    bufs: &[IoSlice<'_>]
) -> Poll<Result<usize, Error>>
self: Pin<&mut Self>,
cx: &mut Context<'_>,
bufs: &[IoSlice<'_>]
) -> Poll<Result<usize, Error>>
impl<W> AsyncWrite for PartialAsyncWrite<W> where
    W: AsyncWrite, [src]
W: AsyncWrite,
fn poll_write(
    self: Pin<&mut Self>, 
    cx: &mut Context<'_>, 
    buf: &[u8]
) -> Poll<Result<usize>>[src]
self: Pin<&mut Self>,
cx: &mut Context<'_>,
buf: &[u8]
) -> Poll<Result<usize>>
fn poll_flush(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Result<()>>[src]
fn poll_shutdown(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Result<()>>[src]
pub fn poll_write_vectored(
    self: Pin<&mut Self>, 
    cx: &mut Context<'_>, 
    bufs: &[IoSlice<'_>]
) -> Poll<Result<usize, Error>>[src]
self: Pin<&mut Self>,
cx: &mut Context<'_>,
bufs: &[IoSlice<'_>]
) -> Poll<Result<usize, Error>>
pub fn is_write_vectored(&self) -> bool[src]
impl<W> Debug for PartialAsyncWrite<W> where
    W: Debug, [src]
W: Debug,
impl<'pin, W> Unpin for PartialAsyncWrite<W> where
    __PartialAsyncWrite<'pin, W>: Unpin, [src]
__PartialAsyncWrite<'pin, W>: Unpin,
Auto Trait Implementations
impl<W> !RefUnwindSafe for PartialAsyncWrite<W>[src]
impl<W> Send for PartialAsyncWrite<W> where
    W: Send, [src]
W: Send,
impl<W> !Sync for PartialAsyncWrite<W>[src]
impl<W> !UnwindSafe for PartialAsyncWrite<W>[src]
Blanket Implementations
impl<T> Any for T where
    T: 'static + ?Sized, [src]
T: 'static + ?Sized,
impl<R> AsyncBufReadExt for R where
    R: AsyncBufRead + ?Sized, 
R: AsyncBufRead + ?Sized,
pub fn fill_buf(&mut self) -> FillBuf<'_, Self> where
    Self: Unpin, 
Self: Unpin,
pub fn consume_unpin(&mut self, amt: usize) where
    Self: Unpin, 
Self: Unpin,
pub fn read_until(
    &'a mut self, 
    byte: u8, 
    buf: &'a mut Vec<u8, Global>
) -> ReadUntil<'a, Self> where
    Self: Unpin, 
&'a mut self,
byte: u8,
buf: &'a mut Vec<u8, Global>
) -> ReadUntil<'a, Self> where
Self: Unpin,
pub fn read_line(&'a mut self, buf: &'a mut String) -> ReadLine<'a, Self> where
    Self: Unpin, 
Self: Unpin,
pub fn lines(self) -> Lines<Self>
impl<R> AsyncBufReadExt for R where
    R: AsyncBufRead + ?Sized, [src]
R: AsyncBufRead + ?Sized,
pub fn read_until(
    &'a mut self, 
    byte: u8, 
    buf: &'a mut Vec<u8, Global>
) -> ReadUntil<'a, Self> where
    Self: Unpin, [src]
&'a mut self,
byte: u8,
buf: &'a mut Vec<u8, Global>
) -> ReadUntil<'a, Self> where
Self: Unpin,
pub fn read_line(&'a mut self, buf: &'a mut String) -> ReadLine<'a, Self> where
    Self: Unpin, [src]
Self: Unpin,
pub fn split(self, byte: u8) -> Split<Self> where
    Self: Unpin, [src]
Self: Unpin,
pub fn lines(self) -> Lines<Self>[src]
impl<R> AsyncReadExt for R where
    R: AsyncRead + ?Sized, 
R: AsyncRead + ?Sized,
pub fn chain<R>(self, next: R) -> Chain<Self, R> where
    R: AsyncRead, 
R: AsyncRead,
pub fn read(&'a mut self, buf: &'a mut [u8]) -> Read<'a, Self> where
    Self: Unpin, 
Self: Unpin,
pub fn read_vectored(
    &'a mut self, 
    bufs: &'a mut [IoSliceMut<'a>]
) -> ReadVectored<'a, Self> where
    Self: Unpin, 
&'a mut self,
bufs: &'a mut [IoSliceMut<'a>]
) -> ReadVectored<'a, Self> where
Self: Unpin,
pub fn read_exact(&'a mut self, buf: &'a mut [u8]) -> ReadExact<'a, Self> where
    Self: Unpin, 
Self: Unpin,
pub fn read_to_end(
    &'a mut self, 
    buf: &'a mut Vec<u8, Global>
) -> ReadToEnd<'a, Self> where
    Self: Unpin, 
&'a mut self,
buf: &'a mut Vec<u8, Global>
) -> ReadToEnd<'a, Self> where
Self: Unpin,
pub fn read_to_string(
    &'a mut self, 
    buf: &'a mut String
) -> ReadToString<'a, Self> where
    Self: Unpin, 
&'a mut self,
buf: &'a mut String
) -> ReadToString<'a, Self> where
Self: Unpin,
pub fn split(self) -> (ReadHalf<Self>, WriteHalf<Self>) where
    Self: AsyncWrite, 
Self: AsyncWrite,
pub fn take(self, limit: u64) -> Take<Self>
impl<R> AsyncReadExt for R where
    R: AsyncRead + ?Sized, [src]
R: AsyncRead + ?Sized,
pub fn chain<R>(self, next: R) -> Chain<Self, R> where
    R: AsyncRead, [src]
R: AsyncRead,
pub fn read(&'a mut self, buf: &'a mut [u8]) -> Read<'a, Self> where
    Self: Unpin, [src]
Self: Unpin,
pub fn read_buf<B>(&'a mut self, buf: &'a mut B) -> ReadBuf<'a, Self, B> where
    Self: Unpin,
    B: BufMut, [src]
Self: Unpin,
B: BufMut,
pub fn read_exact(&'a mut self, buf: &'a mut [u8]) -> ReadExact<'a, Self> where
    Self: Unpin, [src]
Self: Unpin,
pub fn read_u8(&'a mut self) -> ReadU8<&'a mut Self> where
    Self: Unpin, [src]
Self: Unpin,
pub fn read_i8(&'a mut self) -> ReadI8<&'a mut Self> where
    Self: Unpin, [src]
Self: Unpin,
pub fn read_u16(&'a mut self) -> ReadU16<&'a mut Self> where
    Self: Unpin, [src]
Self: Unpin,
pub fn read_i16(&'a mut self) -> ReadI16<&'a mut Self> where
    Self: Unpin, [src]
Self: Unpin,
pub fn read_u32(&'a mut self) -> ReadU32<&'a mut Self> where
    Self: Unpin, [src]
Self: Unpin,
pub fn read_i32(&'a mut self) -> ReadI32<&'a mut Self> where
    Self: Unpin, [src]
Self: Unpin,
pub fn read_u64(&'a mut self) -> ReadU64<&'a mut Self> where
    Self: Unpin, [src]
Self: Unpin,
pub fn read_i64(&'a mut self) -> ReadI64<&'a mut Self> where
    Self: Unpin, [src]
Self: Unpin,
pub fn read_u128(&'a mut self) -> ReadU128<&'a mut Self> where
    Self: Unpin, [src]
Self: Unpin,
pub fn read_i128(&'a mut self) -> ReadI128<&'a mut Self> where
    Self: Unpin, [src]
Self: Unpin,
pub fn read_u16_le(&'a mut self) -> ReadU16Le<&'a mut Self> where
    Self: Unpin, [src]
Self: Unpin,
pub fn read_i16_le(&'a mut self) -> ReadI16Le<&'a mut Self> where
    Self: Unpin, [src]
Self: Unpin,
pub fn read_u32_le(&'a mut self) -> ReadU32Le<&'a mut Self> where
    Self: Unpin, [src]
Self: Unpin,
pub fn read_i32_le(&'a mut self) -> ReadI32Le<&'a mut Self> where
    Self: Unpin, [src]
Self: Unpin,
pub fn read_u64_le(&'a mut self) -> ReadU64Le<&'a mut Self> where
    Self: Unpin, [src]
Self: Unpin,
pub fn read_i64_le(&'a mut self) -> ReadI64Le<&'a mut Self> where
    Self: Unpin, [src]
Self: Unpin,
pub fn read_u128_le(&'a mut self) -> ReadU128Le<&'a mut Self> where
    Self: Unpin, [src]
Self: Unpin,
pub fn read_i128_le(&'a mut self) -> ReadI128Le<&'a mut Self> where
    Self: Unpin, [src]
Self: Unpin,
pub fn read_to_end(
    &'a mut self, 
    buf: &'a mut Vec<u8, Global>
) -> ReadToEnd<'a, Self> where
    Self: Unpin, [src]
&'a mut self,
buf: &'a mut Vec<u8, Global>
) -> ReadToEnd<'a, Self> where
Self: Unpin,
pub fn read_to_string(
    &'a mut self, 
    dst: &'a mut String
) -> ReadToString<'a, Self> where
    Self: Unpin, [src]
&'a mut self,
dst: &'a mut String
) -> ReadToString<'a, Self> where
Self: Unpin,
pub fn take(self, limit: u64) -> Take<Self>[src]
impl<S> AsyncSeekExt for S where
    S: AsyncSeek + ?Sized, 
S: AsyncSeek + ?Sized,
impl<S> AsyncSeekExt for S where
    S: AsyncSeek + ?Sized, [src]
S: AsyncSeek + ?Sized,
impl<W> AsyncWriteExt for W where
    W: AsyncWrite + ?Sized, 
W: AsyncWrite + ?Sized,
pub fn flush(&mut self) -> Flush<'_, Self> where
    Self: Unpin, 
Self: Unpin,
pub fn close(&mut self) -> Close<'_, Self> where
    Self: Unpin, 
Self: Unpin,
pub fn write(&'a mut self, buf: &'a [u8]) -> Write<'a, Self> where
    Self: Unpin, 
Self: Unpin,
pub fn write_vectored(
    &'a mut self, 
    bufs: &'a [IoSlice<'a>]
) -> WriteVectored<'a, Self> where
    Self: Unpin, 
&'a mut self,
bufs: &'a [IoSlice<'a>]
) -> WriteVectored<'a, Self> where
Self: Unpin,
pub fn write_all(&'a mut self, buf: &'a [u8]) -> WriteAll<'a, Self> where
    Self: Unpin, 
Self: Unpin,
pub fn into_sink<Item>(self) -> IntoSink<Self, Item> where
    Item: AsRef<[u8]>, 
Item: AsRef<[u8]>,
impl<W> AsyncWriteExt for W where
    W: AsyncWrite + ?Sized, [src]
W: AsyncWrite + ?Sized,
pub fn write(&'a mut self, src: &'a [u8]) -> Write<'a, Self> where
    Self: Unpin, [src]
Self: Unpin,
pub fn write_buf<B>(&'a mut self, src: &'a mut B) -> WriteBuf<'a, Self, B> where
    Self: Unpin,
    B: Buf, [src]
Self: Unpin,
B: Buf,
pub fn write_all(&'a mut self, src: &'a [u8]) -> WriteAll<'a, Self> where
    Self: Unpin, [src]
Self: Unpin,
pub fn write_u8(&'a mut self, n: u8) -> WriteU8<&'a mut Self> where
    Self: Unpin, [src]
Self: Unpin,
pub fn write_i8(&'a mut self, n: i8) -> WriteI8<&'a mut Self> where
    Self: Unpin, [src]
Self: Unpin,
pub fn write_u16(&'a mut self, n: u16) -> WriteU16<&'a mut Self> where
    Self: Unpin, [src]
Self: Unpin,
pub fn write_i16(&'a mut self, n: i16) -> WriteI16<&'a mut Self> where
    Self: Unpin, [src]
Self: Unpin,
pub fn write_u32(&'a mut self, n: u32) -> WriteU32<&'a mut Self> where
    Self: Unpin, [src]
Self: Unpin,
pub fn write_i32(&'a mut self, n: i32) -> WriteI32<&'a mut Self> where
    Self: Unpin, [src]
Self: Unpin,
pub fn write_u64(&'a mut self, n: u64) -> WriteU64<&'a mut Self> where
    Self: Unpin, [src]
Self: Unpin,
pub fn write_i64(&'a mut self, n: i64) -> WriteI64<&'a mut Self> where
    Self: Unpin, [src]
Self: Unpin,
pub fn write_u128(&'a mut self, n: u128) -> WriteU128<&'a mut Self> where
    Self: Unpin, [src]
Self: Unpin,
pub fn write_i128(&'a mut self, n: i128) -> WriteI128<&'a mut Self> where
    Self: Unpin, [src]
Self: Unpin,
pub fn write_u16_le(&'a mut self, n: u16) -> WriteU16Le<&'a mut Self> where
    Self: Unpin, [src]
Self: Unpin,
pub fn write_i16_le(&'a mut self, n: i16) -> WriteI16Le<&'a mut Self> where
    Self: Unpin, [src]
Self: Unpin,
pub fn write_u32_le(&'a mut self, n: u32) -> WriteU32Le<&'a mut Self> where
    Self: Unpin, [src]
Self: Unpin,
pub fn write_i32_le(&'a mut self, n: i32) -> WriteI32Le<&'a mut Self> where
    Self: Unpin, [src]
Self: Unpin,
pub fn write_u64_le(&'a mut self, n: u64) -> WriteU64Le<&'a mut Self> where
    Self: Unpin, [src]
Self: Unpin,
pub fn write_i64_le(&'a mut self, n: i64) -> WriteI64Le<&'a mut Self> where
    Self: Unpin, [src]
Self: Unpin,
pub fn write_u128_le(&'a mut self, n: u128) -> WriteU128Le<&'a mut Self> where
    Self: Unpin, [src]
Self: Unpin,
pub fn write_i128_le(&'a mut self, n: i128) -> WriteI128Le<&'a mut Self> where
    Self: Unpin, [src]
Self: Unpin,
pub fn flush(&mut self) -> Flush<'_, Self> where
    Self: Unpin, [src]
Self: Unpin,
pub fn shutdown(&mut self) -> Shutdown<'_, Self> where
    Self: Unpin, [src]
Self: Unpin,
impl<T> Borrow<T> for T where
    T: ?Sized, [src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
    T: ?Sized, [src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T[src]
impl<T> From<T> for T[src]
impl<T, U> Into<U> for T where
    U: From<T>, [src]
U: From<T>,
impl<T, U> TryFrom<U> for T where
    U: Into<T>, [src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>[src]
impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, [src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
pub fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>[src]
impl<V, T> VZip<V> for T where
    V: MultiLane<T>, 
V: MultiLane<T>,