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) -> Self where
I: IntoIterator<Item = PartialOp> + 'static,
I::IntoIter: Send,
Available on crate feature futures03
only.
pub fn new<I>(inner: W, iter: I) -> Self where
I: IntoIterator<Item = PartialOp> + 'static,
I::IntoIter: Send,
futures03
only.Creates a new PartialAsyncWrite
wrapper over the writer with the specified PartialOp
s.
sourcepub fn set_ops<I>(&mut self, iter: I) -> &mut Self where
I: IntoIterator<Item = PartialOp> + 'static,
I::IntoIter: Send,
Available on crate feature futures03
only.
pub fn set_ops<I>(&mut self, iter: I) -> &mut Self where
I: IntoIterator<Item = PartialOp> + 'static,
I::IntoIter: Send,
futures03
only.Sets the PartialOp
s 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,
Available on crate feature futures03
only.
pub fn pin_set_ops<I>(self: Pin<&mut Self>, iter: I) -> Pin<&mut Self> where
I: IntoIterator<Item = PartialOp> + 'static,
I::IntoIter: Send,
futures03
only.Sets the PartialOp
s for this writer in a pinned context.
sourcepub fn get_ref(&self) -> &W
Available on crate feature futures03
only.
pub fn get_ref(&self) -> &W
futures03
only.Returns a shared reference to the underlying writer.
sourcepub fn get_mut(&mut self) -> &mut W
Available on crate feature futures03
only.
pub fn get_mut(&mut self) -> &mut W
futures03
only.Returns a mutable reference to the underlying writer.
sourcepub fn pin_get_mut(self: Pin<&mut Self>) -> Pin<&mut W>
Available on crate feature futures03
only.
pub fn pin_get_mut(self: Pin<&mut Self>) -> Pin<&mut W>
futures03
only.Returns a pinned mutable reference to the underlying writer.
sourcepub fn into_inner(self) -> W
Available on crate feature futures03
only.
pub fn into_inner(self) -> W
futures03
only.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.
sourcefn poll_read(
self: Pin<&mut Self>,
cx: &mut Context<'_>,
buf: &mut [u8]
) -> Poll<Result<usize>>
fn poll_read(
self: Pin<&mut Self>,
cx: &mut Context<'_>,
buf: &mut [u8]
) -> Poll<Result<usize>>
Attempt to read from the AsyncRead
into buf
. Read more
sourcefn poll_read_vectored(
self: Pin<&mut Self>,
cx: &mut Context<'_>,
bufs: &mut [IoSliceMut<'_>]
) -> Poll<Result<usize>>
fn poll_read_vectored(
self: Pin<&mut Self>,
cx: &mut Context<'_>,
bufs: &mut [IoSliceMut<'_>]
) -> Poll<Result<usize>>
Attempt to read from the AsyncRead
into bufs
using vectored
IO operations. Read more
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>>
Attempt to write bytes from buf
into the object. Read more
sourcefn 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
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>>
Attempt to write bytes from buf
into the object. Read more
sourcefn 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
sourcefn 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
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>>
Like poll_write
, except that it writes from a slice of buffers. Read more
sourcefn is_write_vectored(&self) -> bool
fn is_write_vectored(&self) -> bool
Determines if this writer has an efficient poll_write_vectored
implementation. Read more
sourceimpl<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
sourceimpl<R> AsyncBufReadExt for R where
R: AsyncBufRead + ?Sized,
impl<R> AsyncBufReadExt for R where
R: AsyncBufRead + ?Sized,
sourcefn 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
sourcefn consume_unpin(&mut self, amt: usize) where
Self: Unpin,
fn consume_unpin(&mut self, amt: usize) where
Self: Unpin,
A convenience for calling AsyncBufRead::consume
on Unpin
IO types. Read more
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,
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 more
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,
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 more
sourcefn lines(self) -> Lines<Self>
fn lines(self) -> Lines<Self>
Returns a stream over the lines of this reader.
This method is the async equivalent to BufRead::lines
. Read more
sourceimpl<R> AsyncReadExt for R where
R: AsyncRead + ?Sized,
impl<R> AsyncReadExt for R where
R: AsyncRead + ?Sized,
sourcefn chain<R>(self, next: R) -> Chain<Self, R> where
R: AsyncRead,
fn chain<R>(self, next: R) -> Chain<Self, R> where
R: AsyncRead,
Creates an adaptor which will chain this stream with another. Read more
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,
Tries to read some bytes directly into the given buf
in asynchronous
manner, returning a future type. Read more
sourcefn 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,
Creates a future which will read from the AsyncRead
into bufs
using vectored
IO operations. Read more
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,
Creates a future which will read exactly enough bytes to fill buf
,
returning an error if end of file (EOF) is hit sooner. Read more
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,
Creates a future which will read all the bytes from this AsyncRead
. Read more
sourcefn 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,
Creates a future which will read all the bytes from this AsyncRead
. Read more
sourceimpl<S> AsyncSeekExt for S where
S: AsyncSeek + ?Sized,
impl<S> AsyncSeekExt for S where
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,
Creates a future which will seek an IO object, and then yield the new position in the object and the object itself. Read more
sourcefn stream_position(&mut self) -> Seek<'_, Self> where
Self: Unpin,
fn stream_position(&mut self) -> Seek<'_, Self> where
Self: Unpin,
Creates a future which will return the current seek position from the start of the stream. Read more
sourceimpl<W> AsyncWriteExt for W where
W: AsyncWrite + ?Sized,
impl<W> AsyncWriteExt for W where
W: AsyncWrite + ?Sized,
sourcefn 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 more
sourcefn 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
.
sourcefn 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,
Creates a future which will write bytes from buf
into the object. Read more
sourcefn 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,
Creates a future which will write bytes from bufs
into the object using vectored
IO operations. Read more
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more