Struct partial_io::PartialAsyncWrite
source · [−]pub struct PartialAsyncWrite<W> { /* private fields */ }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
sourceimpl<W> PartialAsyncWrite<W>
impl<W> PartialAsyncWrite<W>
sourcepub fn new<I>(inner: W, iter: I) -> Selfwhere
I: IntoIterator<Item = PartialOp> + 'static,
I::IntoIter: Send,
pub fn new<I>(inner: W, iter: I) -> Selfwhere
I: IntoIterator<Item = PartialOp> + 'static,
I::IntoIter: Send,
Creates a new PartialAsyncWrite wrapper over the writer with the specified PartialOps.
sourcepub fn set_ops<I>(&mut self, iter: I) -> &mut Selfwhere
I: IntoIterator<Item = PartialOp> + 'static,
I::IntoIter: Send,
pub fn set_ops<I>(&mut self, iter: I) -> &mut Selfwhere
I: IntoIterator<Item = PartialOp> + 'static,
I::IntoIter: Send,
Sets the PartialOps for this writer.
sourcepub fn pin_set_ops<I>(self: Pin<&mut Self>, iter: I) -> Pin<&mut Self>where
I: IntoIterator<Item = PartialOp> + 'static,
I::IntoIter: Send,
pub fn pin_set_ops<I>(self: Pin<&mut Self>, iter: I) -> Pin<&mut Self>where
I: IntoIterator<Item = PartialOp> + 'static,
I::IntoIter: Send,
Sets the PartialOps 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
sourceimpl<W> AsyncBufRead for PartialAsyncWrite<W>where
W: AsyncBufRead,
impl<W> AsyncBufRead for PartialAsyncWrite<W>where
W: AsyncBufRead,
This is a forwarding impl to support duplex structs.
sourceimpl<W> AsyncBufRead for PartialAsyncWrite<W>where
W: AsyncBufRead,
impl<W> AsyncBufRead for PartialAsyncWrite<W>where
W: AsyncBufRead,
This is a forwarding impl to support duplex structs.
sourceimpl<W> AsyncRead for PartialAsyncWrite<W>where
W: AsyncRead,
impl<W> AsyncRead for PartialAsyncWrite<W>where
W: AsyncRead,
This is a forwarding impl to support duplex structs.
sourceimpl<W> AsyncRead for PartialAsyncWrite<W>where
W: AsyncRead,
impl<W> AsyncRead for PartialAsyncWrite<W>where
W: AsyncRead,
This is a forwarding impl to support duplex structs.
sourceimpl<W> AsyncSeek for PartialAsyncWrite<W>where
W: AsyncSeek,
impl<W> AsyncSeek for PartialAsyncWrite<W>where
W: AsyncSeek,
This is a forwarding impl to support duplex structs.
sourceimpl<W> AsyncSeek for PartialAsyncWrite<W>where
W: AsyncSeek,
impl<W> AsyncSeek for PartialAsyncWrite<W>where
W: AsyncSeek,
This is a forwarding impl to support duplex structs.
sourceimpl<W> AsyncWrite for PartialAsyncWrite<W>where
W: AsyncWrite,
impl<W> AsyncWrite for PartialAsyncWrite<W>where
W: AsyncWrite,
sourcefn 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 moresourcefn poll_flush(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Result<()>>
fn poll_flush(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Result<()>>
sourceimpl<W> AsyncWrite for PartialAsyncWrite<W>where
W: AsyncWrite,
impl<W> AsyncWrite for PartialAsyncWrite<W>where
W: AsyncWrite,
sourcefn 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 moresourcefn poll_flush(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Result<()>>
fn poll_flush(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Result<()>>
sourcefn poll_shutdown(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Result<()>>
fn poll_shutdown(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Result<()>>
sourcefn 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 moresourcefn is_write_vectored(&self) -> bool
fn is_write_vectored(&self) -> bool
poll_write_vectored
implementation. Read moresourceimpl<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
__PartialAsyncWrite<'pin, W>: Unpin,
Auto Trait Implementations
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
impl<R> AsyncBufReadExt for Rwhere
R: AsyncBufRead + ?Sized,
impl<R> AsyncBufReadExt for Rwhere
R: AsyncBufRead + ?Sized,
fn fill_buf(&mut self) -> FillBuf<'_, Self>where
Self: Unpin,
fn fill_buf(&mut self) -> FillBuf<'_, Self>where
Self: Unpin,
fn consume_unpin(&mut self, amt: usize)where
Self: Unpin,
fn consume_unpin(&mut self, amt: usize)where
Self: Unpin,
fn read_until(
&'a mut self,
byte: u8,
buf: &'a mut Vec<u8, Global>
) -> ReadUntil<'a, Self>where
Self: Unpin,
fn read_until(
&'a mut self,
byte: u8,
buf: &'a mut Vec<u8, Global>
) -> 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 morefn read_line(&'a mut self, buf: &'a mut String) -> ReadLine<'a, Self>where
Self: Unpin,
fn read_line(&'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 morefn lines(self) -> Lines<Self>
fn lines(self) -> Lines<Self>
BufRead::lines. Read moresourceimpl<R> AsyncBufReadExt for Rwhere
R: AsyncBufRead + ?Sized,
impl<R> AsyncBufReadExt for Rwhere
R: AsyncBufRead + ?Sized,
sourcefn read_until(
&'a mut self,
byte: u8,
buf: &'a mut Vec<u8, Global>
) -> ReadUntil<'a, Self>where
Self: Unpin,
fn read_until(
&'a mut self,
byte: u8,
buf: &'a mut Vec<u8, Global>
) -> ReadUntil<'a, Self>where
Self: Unpin,
sourcefn read_line(&'a mut self, buf: &'a mut String) -> ReadLine<'a, Self>where
Self: Unpin,
fn read_line(&'a mut self, buf: &'a mut String) -> ReadLine<'a, Self>where
Self: Unpin,
sourcefn split(self, byte: u8) -> Split<Self>where
Self: Unpin,
fn split(self, byte: u8) -> Split<Self>where
Self: Unpin,
byte. Read moresourcefn fill_buf(&mut self) -> FillBuf<'_, Self>where
Self: Unpin,
fn fill_buf(&mut self) -> FillBuf<'_, Self>where
Self: Unpin,
sourcefn lines(self) -> Lines<Self>
fn lines(self) -> Lines<Self>
BufRead::lines. Read moreimpl<R> AsyncReadExt for Rwhere
R: AsyncRead + ?Sized,
impl<R> AsyncReadExt for Rwhere
R: AsyncRead + ?Sized,
fn chain<R>(self, next: R) -> Chain<Self, R>where
R: AsyncRead,
fn chain<R>(self, next: R) -> Chain<Self, R>where
R: AsyncRead,
fn read(&'a mut self, buf: &'a mut [u8]) -> Read<'a, Self>where
Self: Unpin,
fn read(&'a mut self, buf: &'a mut [u8]) -> Read<'a, Self>where
Self: Unpin,
buf in asynchronous
manner, returning a future type. Read morefn read_vectored(
&'a mut self,
bufs: &'a mut [IoSliceMut<'a>]
) -> ReadVectored<'a, Self>where
Self: Unpin,
fn read_vectored(
&'a mut self,
bufs: &'a mut [IoSliceMut<'a>]
) -> ReadVectored<'a, Self>where
Self: Unpin,
AsyncRead into bufs using vectored
IO operations. Read morefn read_exact(&'a mut self, buf: &'a mut [u8]) -> ReadExact<'a, Self>where
Self: Unpin,
fn read_exact(&'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 morefn read_to_end(&'a mut self, buf: &'a mut Vec<u8, Global>) -> ReadToEnd<'a, Self>where
Self: Unpin,
fn read_to_end(&'a mut self, buf: &'a mut Vec<u8, Global>) -> ReadToEnd<'a, Self>where
Self: Unpin,
AsyncRead. Read morefn read_to_string(&'a mut self, buf: &'a mut String) -> ReadToString<'a, Self>where
Self: Unpin,
fn read_to_string(&'a mut self, buf: &'a mut String) -> ReadToString<'a, Self>where
Self: Unpin,
AsyncRead. Read moresourceimpl<R> AsyncReadExt for Rwhere
R: AsyncRead + ?Sized,
impl<R> AsyncReadExt for Rwhere
R: AsyncRead + ?Sized,
sourcefn read(&'a mut self, buf: &'a mut [u8]) -> Read<'a, Self>where
Self: Unpin,
fn read(&'a mut self, buf: &'a mut [u8]) -> Read<'a, Self>where
Self: Unpin,
sourcefn read_buf<B>(&'a mut self, buf: &'a mut B) -> ReadBuf<'a, Self, B>where
Self: Unpin,
B: BufMut,
fn read_buf<B>(&'a mut self, buf: &'a mut B) -> ReadBuf<'a, Self, B>where
Self: Unpin,
B: BufMut,
sourcefn read_exact(&'a mut self, buf: &'a mut [u8]) -> ReadExact<'a, Self>where
Self: Unpin,
fn read_exact(&'a mut self, buf: &'a mut [u8]) -> ReadExact<'a, Self>where
Self: Unpin,
buf. Read moresourcefn read_u8(&'a mut self) -> ReadU8<&'a mut Self>where
Self: Unpin,
fn read_u8(&'a mut self) -> ReadU8<&'a mut Self>where
Self: Unpin,
sourcefn read_i8(&'a mut self) -> ReadI8<&'a mut Self>where
Self: Unpin,
fn read_i8(&'a mut self) -> ReadI8<&'a mut Self>where
Self: Unpin,
sourcefn read_u16(&'a mut self) -> ReadU16<&'a mut Self>where
Self: Unpin,
fn read_u16(&'a mut self) -> ReadU16<&'a mut Self>where
Self: Unpin,
sourcefn read_i16(&'a mut self) -> ReadI16<&'a mut Self>where
Self: Unpin,
fn read_i16(&'a mut self) -> ReadI16<&'a mut Self>where
Self: Unpin,
sourcefn read_u32(&'a mut self) -> ReadU32<&'a mut Self>where
Self: Unpin,
fn read_u32(&'a mut self) -> ReadU32<&'a mut Self>where
Self: Unpin,
sourcefn read_i32(&'a mut self) -> ReadI32<&'a mut Self>where
Self: Unpin,
fn read_i32(&'a mut self) -> ReadI32<&'a mut Self>where
Self: Unpin,
sourcefn read_u64(&'a mut self) -> ReadU64<&'a mut Self>where
Self: Unpin,
fn read_u64(&'a mut self) -> ReadU64<&'a mut Self>where
Self: Unpin,
sourcefn read_i64(&'a mut self) -> ReadI64<&'a mut Self>where
Self: Unpin,
fn read_i64(&'a mut self) -> ReadI64<&'a mut Self>where
Self: Unpin,
sourcefn read_u128(&'a mut self) -> ReadU128<&'a mut Self>where
Self: Unpin,
fn read_u128(&'a mut self) -> ReadU128<&'a mut Self>where
Self: Unpin,
sourcefn read_i128(&'a mut self) -> ReadI128<&'a mut Self>where
Self: Unpin,
fn read_i128(&'a mut self) -> ReadI128<&'a mut Self>where
Self: Unpin,
sourcefn read_f32(&'a mut self) -> ReadF32<&'a mut Self>where
Self: Unpin,
fn read_f32(&'a mut self) -> ReadF32<&'a mut Self>where
Self: Unpin,
sourcefn read_f64(&'a mut self) -> ReadF64<&'a mut Self>where
Self: Unpin,
fn read_f64(&'a mut self) -> ReadF64<&'a mut Self>where
Self: Unpin,
sourcefn read_u16_le(&'a mut self) -> ReadU16Le<&'a mut Self>where
Self: Unpin,
fn read_u16_le(&'a mut self) -> ReadU16Le<&'a mut Self>where
Self: Unpin,
sourcefn read_i16_le(&'a mut self) -> ReadI16Le<&'a mut Self>where
Self: Unpin,
fn read_i16_le(&'a mut self) -> ReadI16Le<&'a mut Self>where
Self: Unpin,
sourcefn read_u32_le(&'a mut self) -> ReadU32Le<&'a mut Self>where
Self: Unpin,
fn read_u32_le(&'a mut self) -> ReadU32Le<&'a mut Self>where
Self: Unpin,
sourcefn read_i32_le(&'a mut self) -> ReadI32Le<&'a mut Self>where
Self: Unpin,
fn read_i32_le(&'a mut self) -> ReadI32Le<&'a mut Self>where
Self: Unpin,
sourcefn read_u64_le(&'a mut self) -> ReadU64Le<&'a mut Self>where
Self: Unpin,
fn read_u64_le(&'a mut self) -> ReadU64Le<&'a mut Self>where
Self: Unpin,
sourcefn read_i64_le(&'a mut self) -> ReadI64Le<&'a mut Self>where
Self: Unpin,
fn read_i64_le(&'a mut self) -> ReadI64Le<&'a mut Self>where
Self: Unpin,
sourcefn read_u128_le(&'a mut self) -> ReadU128Le<&'a mut Self>where
Self: Unpin,
fn read_u128_le(&'a mut self) -> ReadU128Le<&'a mut Self>where
Self: Unpin,
sourcefn read_i128_le(&'a mut self) -> ReadI128Le<&'a mut Self>where
Self: Unpin,
fn read_i128_le(&'a mut self) -> ReadI128Le<&'a mut Self>where
Self: Unpin,
sourcefn read_f32_le(&'a mut self) -> ReadF32Le<&'a mut Self>where
Self: Unpin,
fn read_f32_le(&'a mut self) -> ReadF32Le<&'a mut Self>where
Self: Unpin,
sourcefn read_f64_le(&'a mut self) -> ReadF64Le<&'a mut Self>where
Self: Unpin,
fn read_f64_le(&'a mut self) -> ReadF64Le<&'a mut Self>where
Self: Unpin,
sourcefn read_to_end(&'a mut self, buf: &'a mut Vec<u8, Global>) -> ReadToEnd<'a, Self>where
Self: Unpin,
fn read_to_end(&'a mut self, buf: &'a mut Vec<u8, Global>) -> ReadToEnd<'a, Self>where
Self: Unpin,
buf. Read moresourcefn read_to_string(&'a mut self, dst: &'a mut String) -> ReadToString<'a, Self>where
Self: Unpin,
fn read_to_string(&'a mut self, dst: &'a mut String) -> ReadToString<'a, Self>where
Self: Unpin,
buf. Read moreimpl<S> AsyncSeekExt for Swhere
S: AsyncSeek + ?Sized,
impl<S> AsyncSeekExt for Swhere
S: AsyncSeek + ?Sized,
fn seek(&mut self, pos: SeekFrom) -> Seek<'_, Self>where
Self: Unpin,
fn seek(&mut self, pos: SeekFrom) -> Seek<'_, Self>where
Self: Unpin,
fn stream_position(&mut self) -> Seek<'_, Self>where
Self: Unpin,
fn stream_position(&mut self) -> Seek<'_, Self>where
Self: Unpin,
sourceimpl<S> AsyncSeekExt for Swhere
S: AsyncSeek + ?Sized,
impl<S> AsyncSeekExt for Swhere
S: AsyncSeek + ?Sized,
sourcefn seek(&mut self, pos: SeekFrom) -> Seek<'_, Self>where
Self: Unpin,
fn seek(&mut self, pos: SeekFrom) -> Seek<'_, Self>where
Self: Unpin,
sourcefn rewind(&mut self) -> Seek<'_, Self>where
Self: Unpin,
fn rewind(&mut self) -> Seek<'_, Self>where
Self: Unpin,
sourcefn stream_position(&mut self) -> Seek<'_, Self>where
Self: Unpin,
fn stream_position(&mut self) -> Seek<'_, Self>where
Self: Unpin,
impl<W> AsyncWriteExt for Wwhere
W: AsyncWrite + ?Sized,
impl<W> AsyncWriteExt for Wwhere
W: AsyncWrite + ?Sized,
fn flush(&mut self) -> Flush<'_, Self>where
Self: Unpin,
fn flush(&mut self) -> Flush<'_, Self>where
Self: Unpin,
AsyncWrite. Read morefn close(&mut self) -> Close<'_, Self>where
Self: Unpin,
fn close(&mut self) -> Close<'_, Self>where
Self: Unpin,
AsyncWrite.fn write(&'a mut self, buf: &'a [u8]) -> Write<'a, Self>where
Self: Unpin,
fn write(&'a mut self, buf: &'a [u8]) -> Write<'a, Self>where
Self: Unpin,
buf into the object. Read morefn write_vectored(
&'a mut self,
bufs: &'a [IoSlice<'a>]
) -> WriteVectored<'a, Self>where
Self: Unpin,
fn write_vectored(
&'a mut self,
bufs: &'a [IoSlice<'a>]
) -> WriteVectored<'a, Self>where
Self: Unpin,
bufs into the object using vectored
IO operations. Read more