pub struct Writer<S> { /* private fields */ }
asyncio
only.Expand description
Adds items to the queue.
Values sent by the writer will be added to the end of the reader’s buffer, and capacity can be sent back to the writer from the start of the reader’s buffer to allow it to write more data.
A writer will automatically close itself when dropped.
Implementations§
Source§impl<S> Writer<S>
impl<S> Writer<S>
Sourcepub fn is_reader_open(&self) -> bool
pub fn is_reader_open(&self) -> bool
Returns if the corresponding reader is still open.
If this is false
, any attempt to write or flush the object will fail.
Sourcepub fn has_space(&self) -> bool
pub fn has_space(&self) -> bool
Returns if space is available in the writer’s buffer.
If this is true it is guaranteed that the next call to poll_empty_buf
will return a
non-empty slice, unless feed
is called first.
Keep in mind that when using a reader and writer on separate threads, a writer that has no
space can have more made available at any time - even between calls to has_space
and other
functions.
Sourcepub fn is_flushed(&self) -> bool
pub fn is_flushed(&self) -> bool
Returns if the buffer is flushed, i.e there are no items to read and any read operations will stall.
If this is true a writer can only resume the reader by calling feed
to pass items to
the reader.
Keep in mind that when using a reader and writer on separate threads, a writer that is not
flushed can become flushed at any time - even between calls to is_flushed
and other
functions.
Sourcepub fn poll_empty_buf<T>(
&mut self,
cx: &mut Context<'_>,
) -> Poll<RegionMut<'_, T>>where
S: Storage<T>,
pub fn poll_empty_buf<T>(
&mut self,
cx: &mut Context<'_>,
) -> Poll<RegionMut<'_, T>>where
S: Storage<T>,
Attempt to get the writable buffer, waiting for more space if it is empty.
On success, returns Poll::Ready(Ok(buf))
.
If no space is available for writing, the method returns Poll::Pending
and arranges for
the current task to receive a notification when the reader provides space or is closed.
This functions is a lower-level call. It needs to be paired with the feed
method to
function properly. When calling this method, none of the contents will be “written” in the
sense that later calling poll_empty_buf
may return the same contents. As such, feed
must be called with the number of items that have been written to the buffer to ensure that
the items are never returned twice.
An empty buffer returned indicates that the queue cannot be written to as the reader has closed.
Sourcepub fn feed(&mut self, len: usize)
pub fn feed(&mut self, len: usize)
Marks items at the start of the writer buffer as ready to be read, removing them from the
slice returned by poll_empty_buf
and making them available in the reader’s buffer.
§Panics
This function will panic if amt
is larger than the writer’s available space buffer.
Sourcepub async fn write<T>(&mut self, buf: &[T]) -> usize
pub async fn write<T>(&mut self, buf: &[T]) -> usize
Writes some items from a buffer into this queue, returning how many items were written.
This function will attempt to write the entire contents of buf
, but the entire write may
not succeed if not enough space is available.
§Return
It is guaranteed that the return value is <= buf.len()
.
A return value of 0
indicates one of these two scenarios:
- The reader has closed.
- The buffer specified had a length of 0.
§Cancel safety
This method is cancel safe. If you use it in a select!
statement and some other branch
completes first, then it is guaranteed that no data was written.
Sourcepub async fn write_all<T>(&mut self, buf: &[T]) -> Result<usize, WriteError>
pub async fn write_all<T>(&mut self, buf: &[T]) -> Result<usize, WriteError>
Attempts to write all items in a buffer into this queue.
If the reader closes before all items are written, an error of the kind
WriteError::ReaderClosed
will be returned.
§Return
If the return value is Ok(n)
, it is guaranteed that n == buf.len()
.
§Cancel safety
This method is not cancellation safe. If it is used in a select!
statement and some other
branch completes first, then the provided buffer may have been partially written, but
future calls to write_all
will start over from the beginning of the buffer.
Sourcepub fn poll_flush(
&mut self,
cx: &mut Context<'_>,
) -> Poll<Result<(), WriteError>>
pub fn poll_flush( &mut self, cx: &mut Context<'_>, ) -> Poll<Result<(), WriteError>>
Attempt to flush the buffer, ensuring that any items waiting to be read are consumed by the reader.
On success, returns Poll::Ready(Ok(()))
. If the reader is closed, returns
Poll::Ready(Err(FlushError::ReaderClosed))
.
If flushing cannot immediately complete, this method returns Poll::Pending
and arranges
for the current task to receive a notification when the object can make progress towards
flushing.
Sourcepub async fn flush(&mut self) -> Result<(), WriteError>
pub async fn flush(&mut self) -> Result<(), WriteError>
Flushes the buffer, ensuring that any items waiting to be read are consumed by the reader.
If the reader closes before the buffer is flushed, an error of the kind
WriteError::ReaderClosed
will be returned.
Sourcepub fn poll_close(
&mut self,
cx: &mut Context<'_>,
) -> Poll<Result<(), WriteError>>
pub fn poll_close( &mut self, cx: &mut Context<'_>, ) -> Poll<Result<(), WriteError>>
Attempt to close the writer, flushing any remaining data and indicating to the reader that no more data will be written.
On success, returns Poll::Ready(Ok(()))
. Any future read operations will fail. Closing
the writer multiple times has no effect.
Sourcepub async fn close(&mut self) -> Result<(), WriteError>
pub async fn close(&mut self) -> Result<(), WriteError>
Closes the buffer, flushing any remaining data and indicating to the reader that no more data will be written.
If the reader closes before the buffer is flushed, an error of the kind
WriteError::ReaderClosed
will be returned.
Trait Implementations§
Source§impl<S> AsyncWrite for Writer<S>
Available on crate feature std-io
only.
impl<S> AsyncWrite for Writer<S>
std-io
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<()>>
Auto Trait Implementations§
impl<S> Freeze for Writer<S>
impl<S> !RefUnwindSafe for Writer<S>
impl<S> Send for Writer<S>
impl<S> Sync for Writer<S>
impl<S> Unpin for Writer<S>
impl<S> !UnwindSafe for Writer<S>
Blanket Implementations§
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