Struct base64::read::decoder::DecoderReader
source · pub struct DecoderReader<'e, E: Engine, R: Read> {
engine: &'e E,
inner: R,
b64_buffer: [u8; 1024],
b64_offset: usize,
b64_len: usize,
decoded_buffer: [u8; 3],
decoded_offset: usize,
decoded_len: usize,
total_b64_decoded: usize,
padding_offset: Option<usize>,
}
Expand description
A Read
implementation that decodes base64 data read from an underlying reader.
§Examples
use std::io::Read;
use std::io::Cursor;
use base64::engine::general_purpose;
// use a cursor as the simplest possible `Read` -- in real code this is probably a file, etc.
let mut wrapped_reader = Cursor::new(b"YXNkZg==");
let mut decoder = base64::read::DecoderReader::new(
&mut wrapped_reader,
&general_purpose::STANDARD);
// handle errors as you normally would
let mut result = Vec::new();
decoder.read_to_end(&mut result).unwrap();
assert_eq!(b"asdf", &result[..]);
Fields§
§engine: &'e E
§inner: R
Where b64 data is read from
b64_buffer: [u8; 1024]
§b64_offset: usize
§b64_len: usize
§decoded_buffer: [u8; 3]
§decoded_offset: usize
§decoded_len: usize
§total_b64_decoded: usize
§padding_offset: Option<usize>
Implementations§
source§impl<'e, E: Engine, R: Read> DecoderReader<'e, E, R>
impl<'e, E: Engine, R: Read> DecoderReader<'e, E, R>
sourcepub fn new(reader: R, engine: &'e E) -> Self
pub fn new(reader: R, engine: &'e E) -> Self
Create a new decoder that will read from the provided reader r
.
sourcefn flush_decoded_buf(&mut self, buf: &mut [u8]) -> Result<usize>
fn flush_decoded_buf(&mut self, buf: &mut [u8]) -> Result<usize>
Write as much as possible of the decoded buffer into the target buffer. Must only be called when there is something to write and space to write into. Returns a Result with the number of (decoded) bytes copied.
sourcefn read_from_delegate(&mut self) -> Result<usize>
fn read_from_delegate(&mut self) -> Result<usize>
Read into the remaining space in the buffer after the current contents. Must only be called when there is space to read into in the buffer. Returns the number of bytes read.
sourcefn decode_to_buf(
&mut self,
b64_len_to_decode: usize,
buf: &mut [u8],
) -> Result<usize>
fn decode_to_buf( &mut self, b64_len_to_decode: usize, buf: &mut [u8], ) -> Result<usize>
Decode the requested number of bytes from the b64 buffer into the provided buffer. It’s the caller’s responsibility to choose the number of b64 bytes to decode correctly.
Returns a Result with the number of decoded bytes written to buf
.
sourcepub fn into_inner(self) -> R
pub fn into_inner(self) -> R
Unwraps this DecoderReader
, returning the base reader which it reads base64 encoded
input from.
Because DecoderReader
performs internal buffering, the state of the inner reader is
unspecified. This function is mainly provided because the inner reader type may provide
additional functionality beyond the Read
implementation which may still be useful.
Trait Implementations§
source§impl<'e, E: Engine, R: Read> Read for DecoderReader<'e, E, R>
impl<'e, E: Engine, R: Read> Read for DecoderReader<'e, E, R>
source§fn read(&mut self, buf: &mut [u8]) -> Result<usize>
fn read(&mut self, buf: &mut [u8]) -> Result<usize>
Decode input from the wrapped reader.
Under non-error circumstances, this returns Ok
with the value being the number of bytes
written in buf
.
Where possible, this function buffers base64 to minimize the number of read() calls to the delegate reader.
§Errors
Any errors emitted by the delegate reader are returned. Decoding errors due to invalid
base64 are also possible, and will have io::ErrorKind::InvalidData
.
1.36.0 · source§fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize, Error>
fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize, Error>
read
, except that it reads into a slice of buffers. Read moresource§fn is_read_vectored(&self) -> bool
fn is_read_vectored(&self) -> bool
can_vector
)1.0.0 · source§fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize, Error>
fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize, Error>
buf
. Read more1.0.0 · source§fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>
fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>
buf
. Read more1.6.0 · source§fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>
fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>
buf
. Read moresource§fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<(), Error>
fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<(), Error>
read_buf
)source§fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<(), Error>
fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<(), Error>
read_buf
)cursor
. Read more1.0.0 · source§fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
Read
. Read more