Skip to main content

BoundedWriter

Struct BoundedWriter 

Source
pub struct BoundedWriter<W> { /* private fields */ }
Expand description

A byte allowance and successful-write counter around a caller-owned sink.

Oversized offered buffers are rejected in full before invoking the sink. Short writes count only accepted bytes. Read limits, encoding, hashing, synchronization, atomic publication and cleanup stay with their owners. A sink’s internal buffering/allocation and partial effects on error are not controlled here. Do not publish partial output after a failed producer.

Use io::sink to count serialized bytes without retaining them, or a hashing dependency’s existing Write implementation to bound its input.

Implementations§

Source§

impl<W> BoundedWriter<W>

Source

pub const fn new(inner: W, limit: u64) -> Self

Select the sink and the inclusive total accepted-byte allowance.

Source

pub const fn bytes_written(&self) -> u64

Bytes reported as accepted by successful underlying writes.

This is neither a durability receipt nor an assertion of serialization success. Underlying errors may have effects not reported by Write.

Source

pub const fn limit_exceeded(&self) -> bool

Whether any offered buffer has been rejected by this byte allowance.

Retained even when an encoder hides the underlying typed IO error. A limit rejection leaves the sink and counter unchanged; later writes that fit are permitted, without clearing this observation.

Source

pub fn into_inner(self) -> W

Recover the original sink, including any partial output after failure.

Does not flush, synchronize, retry, publish or discard output. Callers must explicitly flush through this wrapper when their sink requires it.

Trait Implementations§

Source§

impl<W: Write> Write for BoundedWriter<W>

Source§

fn write(&mut self, buffer: &[u8]) -> Result<usize>

Writes a buffer into this writer, returning how many bytes were written. Read more
Source§

fn flush(&mut self) -> Result<()>

Flushes this output stream, ensuring that all intermediately buffered contents reach their destination. Read more
1.36.0 · Source§

fn write_vectored(&mut self, bufs: &[IoSlice<'_>]) -> Result<usize, Error>

Like write, except that it writes from a slice of buffers. Read more
Source§

fn is_write_vectored(&self) -> bool

🔬This is a nightly-only experimental API. (can_vector)
Determines if this Writer has an efficient write_vectored implementation. Read more
1.0.0 · Source§

fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>

Attempts to write an entire buffer into this writer. Read more
Source§

fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<(), Error>

🔬This is a nightly-only experimental API. (write_all_vectored)
Attempts to write multiple buffers into this writer. Read more
1.0.0 · Source§

fn write_fmt(&mut self, args: Arguments<'_>) -> Result<(), Error>

Writes a formatted string into this writer, returning any error encountered. Read more
1.0.0 · Source§

fn by_ref(&mut self) -> &mut Self
where Self: Sized,

Creates a “by reference” adapter for this instance of Write. Read more

Auto Trait Implementations§

§

impl<W> Freeze for BoundedWriter<W>
where W: Freeze,

§

impl<W> RefUnwindSafe for BoundedWriter<W>
where W: RefUnwindSafe,

§

impl<W> Send for BoundedWriter<W>
where W: Send,

§

impl<W> Sync for BoundedWriter<W>
where W: Sync,

§

impl<W> Unpin for BoundedWriter<W>
where W: Unpin,

§

impl<W> UnsafeUnpin for BoundedWriter<W>
where W: UnsafeUnpin,

§

impl<W> UnwindSafe for BoundedWriter<W>
where W: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.