Struct base64::write::EncoderWriter
source · [−]pub struct EncoderWriter<'a, W: 'a + Write> { /* private fields */ }
Expand description
A Write
implementation that base64 encodes data before delegating to the wrapped writer.
Because base64 has special handling for the end of the input data (padding, etc), there’s a
finish()
method on this type that encodes any leftover input bytes and adds padding if
appropriate. It’s called automatically when deallocated (see the Drop
implementation), but
any error that occurs when invoking the underlying writer will be suppressed. If you want to
handle such errors, call finish()
yourself.
Examples
use std::io::Write;
// use a vec as the simplest possible `Write` -- in real code this is probably a file, etc.
let mut wrapped_writer = Vec::new();
{
let mut enc = base64::write::EncoderWriter::new(
&mut wrapped_writer, base64::STANDARD);
// handle errors as you normally would
enc.write_all(b"asdf").unwrap();
// could leave this out to be called by Drop, if you don't care
// about handling errors
enc.finish().unwrap();
}
// base64 was written to the writer
assert_eq!(b"YXNkZg==", &wrapped_writer[..]);
Panics
Calling write()
after finish()
is invalid and will panic.
Errors
Base64 encoding itself does not generate errors, but errors from the wrapped writer will be
returned as per the contract of Write
.
Performance
It has some minor performance loss compared to encoding slices (a couple percent). It does not do any heap allocation.
Implementations
sourceimpl<'a, W: Write> EncoderWriter<'a, W>
impl<'a, W: Write> EncoderWriter<'a, W>
sourcepub fn new(w: &'a mut W, config: Config) -> EncoderWriter<'a, W>ⓘNotable traits for EncoderWriter<'a, W>impl<'a, W: Write> Write for EncoderWriter<'a, W>
pub fn new(w: &'a mut W, config: Config) -> EncoderWriter<'a, W>ⓘNotable traits for EncoderWriter<'a, W>impl<'a, W: Write> Write for EncoderWriter<'a, W>
Create a new encoder that will write to the provided delegate writer w
.
sourcepub fn finish(&mut self) -> Result<()>
pub fn finish(&mut self) -> Result<()>
Encode all remaining buffered data and write it, including any trailing incomplete input triples and associated padding.
Once this succeeds, no further writes can be performed, as that would produce invalid base64.
This may write to the delegate writer multiple times if the delegate writer does not accept all input provided
to its write
each invocation.
Errors
The first error that is not of ErrorKind::Interrupted
will be returned.
Trait Implementations
sourceimpl<'a, W: Write> Debug for EncoderWriter<'a, W>
impl<'a, W: Write> Debug for EncoderWriter<'a, W>
sourceimpl<'a, W: Write> Drop for EncoderWriter<'a, W>
impl<'a, W: Write> Drop for EncoderWriter<'a, W>
sourceimpl<'a, W: Write> Write for EncoderWriter<'a, W>
impl<'a, W: Write> Write for EncoderWriter<'a, W>
sourcefn write(&mut self, input: &[u8]) -> Result<usize>
fn write(&mut self, input: &[u8]) -> Result<usize>
Encode input and then write to the delegate writer.
Under non-error circumstances, this returns Ok
with the value being the number of bytes
of input
consumed. The value may be 0
, which interacts poorly with write_all
, which
interprets Ok(0)
as an error, despite it being allowed by the contract of write
. See
https://github.com/rust-lang/rust/issues/56889 for more on that.
If the previous call to write
provided more (encoded) data than the delegate writer could
accept in a single call to its write
, the remaining data is buffered. As long as buffered
data is present, subsequent calls to write
will try to write the remaining buffered data
to the delegate and return either Ok(0)
– and therefore not consume any of input
– or
an error.
Errors
Any errors emitted by the delegate writer are returned.
sourcefn flush(&mut self) -> Result<()>
fn flush(&mut self) -> Result<()>
Because this is usually treated as OK to call multiple times, it will not flush any incomplete chunks of input or write padding.
sourcefn is_write_vectored(&self) -> bool
fn is_write_vectored(&self) -> bool
can_vector
)Determines if this Write
r has an efficient write_vectored
implementation. Read more
1.0.0 · sourcefn write_all(&mut self, buf: &[u8]) -> Result<(), Error>
fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>
Attempts to write an entire buffer into this writer. Read more
sourcefn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<(), Error>
fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<(), Error>
write_all_vectored
)Attempts to write multiple buffers into this writer. Read more
Auto Trait Implementations
impl<'a, W> RefUnwindSafe for EncoderWriter<'a, W> where
W: RefUnwindSafe,
impl<'a, W> Send for EncoderWriter<'a, W> where
W: Send,
impl<'a, W> Sync for EncoderWriter<'a, W> where
W: Sync,
impl<'a, W> Unpin for EncoderWriter<'a, W>
impl<'a, W> !UnwindSafe for EncoderWriter<'a, W>
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcepub fn borrow_mut(&mut self) -> &mut T
pub fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<W> WriteBytesExt for W where
W: Write + ?Sized,
impl<W> WriteBytesExt for W where
W: Write + ?Sized,
sourcefn write_u8(&mut self, n: u8) -> Result<(), Error>
fn write_u8(&mut self, n: u8) -> Result<(), Error>
Writes an unsigned 8 bit integer to the underlying writer. Read more
sourcefn write_i8(&mut self, n: i8) -> Result<(), Error>
fn write_i8(&mut self, n: i8) -> Result<(), Error>
Writes a signed 8 bit integer to the underlying writer. Read more
sourcefn write_u16<T>(&mut self, n: u16) -> Result<(), Error> where
T: ByteOrder,
fn write_u16<T>(&mut self, n: u16) -> Result<(), Error> where
T: ByteOrder,
Writes an unsigned 16 bit integer to the underlying writer. Read more
sourcefn write_i16<T>(&mut self, n: i16) -> Result<(), Error> where
T: ByteOrder,
fn write_i16<T>(&mut self, n: i16) -> Result<(), Error> where
T: ByteOrder,
Writes a signed 16 bit integer to the underlying writer. Read more
sourcefn write_u24<T>(&mut self, n: u32) -> Result<(), Error> where
T: ByteOrder,
fn write_u24<T>(&mut self, n: u32) -> Result<(), Error> where
T: ByteOrder,
Writes an unsigned 24 bit integer to the underlying writer. Read more
sourcefn write_i24<T>(&mut self, n: i32) -> Result<(), Error> where
T: ByteOrder,
fn write_i24<T>(&mut self, n: i32) -> Result<(), Error> where
T: ByteOrder,
Writes a signed 24 bit integer to the underlying writer. Read more
sourcefn write_u32<T>(&mut self, n: u32) -> Result<(), Error> where
T: ByteOrder,
fn write_u32<T>(&mut self, n: u32) -> Result<(), Error> where
T: ByteOrder,
Writes an unsigned 32 bit integer to the underlying writer. Read more
sourcefn write_i32<T>(&mut self, n: i32) -> Result<(), Error> where
T: ByteOrder,
fn write_i32<T>(&mut self, n: i32) -> Result<(), Error> where
T: ByteOrder,
Writes a signed 32 bit integer to the underlying writer. Read more
sourcefn write_u48<T>(&mut self, n: u64) -> Result<(), Error> where
T: ByteOrder,
fn write_u48<T>(&mut self, n: u64) -> Result<(), Error> where
T: ByteOrder,
Writes an unsigned 48 bit integer to the underlying writer. Read more
sourcefn write_i48<T>(&mut self, n: i64) -> Result<(), Error> where
T: ByteOrder,
fn write_i48<T>(&mut self, n: i64) -> Result<(), Error> where
T: ByteOrder,
Writes a signed 48 bit integer to the underlying writer. Read more
sourcefn write_u64<T>(&mut self, n: u64) -> Result<(), Error> where
T: ByteOrder,
fn write_u64<T>(&mut self, n: u64) -> Result<(), Error> where
T: ByteOrder,
Writes an unsigned 64 bit integer to the underlying writer. Read more
sourcefn write_i64<T>(&mut self, n: i64) -> Result<(), Error> where
T: ByteOrder,
fn write_i64<T>(&mut self, n: i64) -> Result<(), Error> where
T: ByteOrder,
Writes a signed 64 bit integer to the underlying writer. Read more
sourcefn write_u128<T>(&mut self, n: u128) -> Result<(), Error> where
T: ByteOrder,
fn write_u128<T>(&mut self, n: u128) -> Result<(), Error> where
T: ByteOrder,
Writes an unsigned 128 bit integer to the underlying writer.
sourcefn write_i128<T>(&mut self, n: i128) -> Result<(), Error> where
T: ByteOrder,
fn write_i128<T>(&mut self, n: i128) -> Result<(), Error> where
T: ByteOrder,
Writes a signed 128 bit integer to the underlying writer.
sourcefn write_uint<T>(&mut self, n: u64, nbytes: usize) -> Result<(), Error> where
T: ByteOrder,
fn write_uint<T>(&mut self, n: u64, nbytes: usize) -> Result<(), Error> where
T: ByteOrder,
Writes an unsigned n-bytes integer to the underlying writer. Read more
sourcefn write_int<T>(&mut self, n: i64, nbytes: usize) -> Result<(), Error> where
T: ByteOrder,
fn write_int<T>(&mut self, n: i64, nbytes: usize) -> Result<(), Error> where
T: ByteOrder,
Writes a signed n-bytes integer to the underlying writer. Read more
sourcefn write_uint128<T>(&mut self, n: u128, nbytes: usize) -> Result<(), Error> where
T: ByteOrder,
fn write_uint128<T>(&mut self, n: u128, nbytes: usize) -> Result<(), Error> where
T: ByteOrder,
Writes an unsigned n-bytes integer to the underlying writer. Read more
sourcefn write_int128<T>(&mut self, n: i128, nbytes: usize) -> Result<(), Error> where
T: ByteOrder,
fn write_int128<T>(&mut self, n: i128, nbytes: usize) -> Result<(), Error> where
T: ByteOrder,
Writes a signed n-bytes integer to the underlying writer. Read more