pub struct Reader<'a, R: ReadBytes<'a>>(/* private fields */);
Expand description
A convenience structure used for counting the number of bytes read.
This structure wraps an implementation of ReadBytes
. It
forwards read operations to the inner type while also maintaining a count
of the number of bytes that pass through it.
When you have finished with it, you can return the original type via the
into_inner
method.
When compiled with the std
feature this structure implements
Read
.
§Examples
use byteio::{ReadBytes, ReadBytesExt, Reader};
fn main() -> byteio::Result<()> {
let buf: &[u8] = &[1, 0, 2, 0, 0, 0, 3];
let mut reader = Reader::new(buf);
assert_eq!(reader.try_read_u8()?, 1);
assert_eq!(reader.try_read_u16_be()?, 2);
assert_eq!(reader.try_read_u32_be()?, 3);
assert_eq!(reader.num_bytes_read(), 7);
let inner = reader.into_inner();
assert!(inner.is_empty());
Ok(())
}
Implementations§
Source§impl<'a, R: ReadBytes<'a>> Reader<'a, R>
impl<'a, R: ReadBytes<'a>> Reader<'a, R>
Sourcepub fn num_bytes_read(&self) -> usize
pub fn num_bytes_read(&self) -> usize
Retrieves the number of bytes that have been read by this Reader
.
§Examples
use byteio::{ReadBytes, Reader};
let buf = [0_u8; 2];
let mut reader = Reader::new(&buf[..]);
let _ = reader.read_exact(1);
let _ = reader.read_exact(1);
assert_eq!(reader.num_bytes_read(), 2);
Sourcepub fn into_inner(self) -> R
pub fn into_inner(self) -> R
Consumes this Reader
and returns the original ReadBytes
implementor.
§Examples
use byteio::{ReadBytes, Reader};
let buf = [0_u8; 2];
let mut reader = Reader::new(&buf[..]);
let _ = reader.read_exact(1);
let inner = reader.into_inner();
assert_eq!(inner.len(), 1); // the reader consumed one byte from its view of the slice
Trait Implementations§
Source§impl<'a, R: ReadBytes<'a>> Read for Reader<'a, R>
impl<'a, R: ReadBytes<'a>> Read for Reader<'a, R>
Source§fn read(&mut self, buf: &mut [u8]) -> Result<usize>
fn read(&mut self, buf: &mut [u8]) -> Result<usize>
Pull some bytes from this source into the specified buffer, returning
how many bytes were read. Read more
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>
Like
read
, except that it reads into a slice of buffers. Read moreSource§fn is_read_vectored(&self) -> bool
fn is_read_vectored(&self) -> bool
🔬This is a nightly-only experimental API. (
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>
Reads all bytes until EOF in this source, placing them into
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>
Reads all bytes until EOF in this source, appending them to
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>
Reads the exact number of bytes required to fill
buf
. Read moreSource§fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<(), Error>
fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<(), Error>
🔬This is a nightly-only experimental API. (
read_buf
)Pull some bytes from this source into the specified buffer. Read more
Source§fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<(), Error>
fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<(), Error>
🔬This is a nightly-only experimental API. (
read_buf
)Reads the exact number of bytes required to fill
cursor
. Read more1.0.0 · Source§fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
Creates a “by reference” adaptor for this instance of
Read
. Read moreimpl<'a, R: Eq + ReadBytes<'a>> Eq for Reader<'a, R>
impl<'a, R: ReadBytes<'a>> StructuralPartialEq for Reader<'a, R>
Auto Trait Implementations§
impl<'a, R> Freeze for Reader<'a, R>where
R: Freeze,
impl<'a, R> RefUnwindSafe for Reader<'a, R>where
R: RefUnwindSafe,
impl<'a, R> Send for Reader<'a, R>where
R: Send,
impl<'a, R> Sync for Reader<'a, R>where
R: Sync,
impl<'a, R> Unpin for Reader<'a, R>where
R: Unpin,
impl<'a, R> UnwindSafe for Reader<'a, R>where
R: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<'a, R> ReadBytesExt<'a> for Rwhere
R: ReadBytes<'a>,
impl<'a, R> ReadBytesExt<'a> for Rwhere
R: ReadBytes<'a>,
Source§fn try_read_u8(&mut self) -> Result<u8>
fn try_read_u8(&mut self) -> Result<u8>
Attempts to read a
u8
from the underlying buffer. Read moreSource§fn try_read_i8(&mut self) -> Result<i8>
fn try_read_i8(&mut self) -> Result<i8>
Attempts to read an
i8
from the underlying buffer. Read moreSource§fn read_u16_le(&mut self) -> u16
fn read_u16_le(&mut self) -> u16
Reads a little endian
u16
from the underlying buffer. Read moreSource§fn read_u16_be(&mut self) -> u16
fn read_u16_be(&mut self) -> u16
Reads a big endian
u16
from the underlying buffer. Read moreSource§fn try_read_u16_le(&mut self) -> Result<u16>
fn try_read_u16_le(&mut self) -> Result<u16>
Attempts to read a little endian
u16
from the underlying buffer. Read moreSource§fn try_read_u16_be(&mut self) -> Result<u16>
fn try_read_u16_be(&mut self) -> Result<u16>
Attempts to read a big endian
u16
from the underlying buffer. Read moreSource§fn read_i16_le(&mut self) -> i16
fn read_i16_le(&mut self) -> i16
Reads a little endian
i16
from the underlying buffer. Read moreSource§fn read_i16_be(&mut self) -> i16
fn read_i16_be(&mut self) -> i16
Reads a big endian
i16
from the underlying buffer. Read moreSource§fn try_read_i16_le(&mut self) -> Result<i16>
fn try_read_i16_le(&mut self) -> Result<i16>
Attempts to read a little endian
i16
from the underlying buffer. Read moreSource§fn try_read_i16_be(&mut self) -> Result<i16>
fn try_read_i16_be(&mut self) -> Result<i16>
Attempts to read a little endian
i16
from the underlying buffer. Read moreSource§fn read_u32_le(&mut self) -> u32
fn read_u32_le(&mut self) -> u32
Reads a little endian
u32
from the underlying buffer. Read moreSource§fn read_u32_be(&mut self) -> u32
fn read_u32_be(&mut self) -> u32
Reads a big endian
u32
from the underlying buffer. Read moreSource§fn try_read_u32_le(&mut self) -> Result<u32>
fn try_read_u32_le(&mut self) -> Result<u32>
Attempts to read a little endian
u32
from the underlying buffer. Read moreSource§fn try_read_u32_be(&mut self) -> Result<u32>
fn try_read_u32_be(&mut self) -> Result<u32>
Attempts to read a big endian
u32
from the underlying buffer. Read moreSource§fn read_i32_le(&mut self) -> i32
fn read_i32_le(&mut self) -> i32
Reads a little endian
i32
from the underlying buffer. Read moreSource§fn read_i32_be(&mut self) -> i32
fn read_i32_be(&mut self) -> i32
Reads a big endian
i32
from the underlying buffer. Read moreSource§fn try_read_i32_le(&mut self) -> Result<i32>
fn try_read_i32_le(&mut self) -> Result<i32>
Attempts to read a little endian
i32
from the underlying buffer. Read moreSource§fn try_read_i32_be(&mut self) -> Result<i32>
fn try_read_i32_be(&mut self) -> Result<i32>
Attempts to read a big endian
i32
from the underlying buffer. Read moreSource§fn read_u64_le(&mut self) -> u64
fn read_u64_le(&mut self) -> u64
Reads a little endian
u64
from the underlying buffer. Read moreSource§fn read_u64_be(&mut self) -> u64
fn read_u64_be(&mut self) -> u64
Reads a big endian
u64
from the underlying buffer. Read moreSource§fn try_read_u64_le(&mut self) -> Result<u64>
fn try_read_u64_le(&mut self) -> Result<u64>
Attempts to read a little endian
u64
from the underlying buffer. Read moreSource§fn try_read_u64_be(&mut self) -> Result<u64>
fn try_read_u64_be(&mut self) -> Result<u64>
Attempts to read a big endian
u64
from the underlying buffer. Read moreSource§fn read_i64_le(&mut self) -> i64
fn read_i64_le(&mut self) -> i64
Reads a little endian
i64
from the underlying buffer. Read moreSource§fn read_i64_be(&mut self) -> i64
fn read_i64_be(&mut self) -> i64
Reads a big endian
i64
from the underlying buffer. Read moreSource§fn try_read_i64_le(&mut self) -> Result<i64>
fn try_read_i64_le(&mut self) -> Result<i64>
Attempts to read a little endian
i64
from the underlying buffer. Read moreSource§fn try_read_i64_be(&mut self) -> Result<i64>
fn try_read_i64_be(&mut self) -> Result<i64>
Attempts to read a big endian
i64
from the underlying buffer. Read moreSource§fn read_u128_le(&mut self) -> u128
fn read_u128_le(&mut self) -> u128
Reads a little endian
u128
from the underlying buffer. Read moreSource§fn read_u128_be(&mut self) -> u128
fn read_u128_be(&mut self) -> u128
Reads a big endian
u128
from the underlying buffer. Read moreSource§fn try_read_u128_le(&mut self) -> Result<u128>
fn try_read_u128_le(&mut self) -> Result<u128>
Attempts to read a little endian
u128
from the underlying buffer. Read moreSource§fn try_read_u128_be(&mut self) -> Result<u128>
fn try_read_u128_be(&mut self) -> Result<u128>
Attempts to read a big endian
u128
from the underlying buffer. Read moreSource§fn read_i128_le(&mut self) -> i128
fn read_i128_le(&mut self) -> i128
Reads a little endian
i128
from the underlying buffer. Read moreSource§fn read_i128_be(&mut self) -> i128
fn read_i128_be(&mut self) -> i128
Reads a big endian
i128
from the underlying buffer. Read moreSource§fn try_read_i128_le(&mut self) -> Result<i128>
fn try_read_i128_le(&mut self) -> Result<i128>
Attempts to read a little endian
i128
from the underlying buffer. Read moreSource§fn try_read_i128_be(&mut self) -> Result<i128>
fn try_read_i128_be(&mut self) -> Result<i128>
Attempts to read a big endian
i128
from the underlying buffer. Read moreSource§fn read_f32_le(&mut self) -> f32
fn read_f32_le(&mut self) -> f32
Reads a little endian IEEE754
f32
from the underlying buffer. Read moreSource§fn read_f32_be(&mut self) -> f32
fn read_f32_be(&mut self) -> f32
Reads a big endian IEEE754
f32
from the underlying buffer. Read moreSource§fn try_read_f32_le(&mut self) -> Result<f32>
fn try_read_f32_le(&mut self) -> Result<f32>
Attempts to read a little endian IEEE754
f32
from the underlying
buffer. Read moreSource§fn try_read_f32_be(&mut self) -> Result<f32>
fn try_read_f32_be(&mut self) -> Result<f32>
Attempts to read a big endian IEEE754
f32
from the underlying buffer. Read moreSource§fn read_f64_le(&mut self) -> f64
fn read_f64_le(&mut self) -> f64
Reads a little endian IEEE754
f64
from the underlying buffer. Read moreSource§fn read_f64_be(&mut self) -> f64
fn read_f64_be(&mut self) -> f64
Reads a big endian IEEE754
f64
from the underlying buffer. Read more