Skip to main content

rw_types/read/
ext.rs

1use std::io;
2
3use crate::{Endian, read::Readable};
4
5/// An extension to the [`io::Read`] trait.
6pub trait ReadExt: io::Read {
7    /// Reads `R` with the specified endian.
8    fn read_ty<R: Readable>(&mut self, endian: Endian) -> io::Result<R>;
9    /// Reads `R` with big endian.
10    fn read_ty_be<R: Readable>(&mut self) -> io::Result<R>;
11    /// Reads `R` with little endian.
12    fn read_ty_le<R: Readable>(&mut self) -> io::Result<R>;
13    /// Reads `R` with native endian.
14    fn read_ty_ne<R: Readable>(&mut self) -> io::Result<R>;
15}
16
17impl<T: io::Read> ReadExt for T {
18    #[inline(always)]
19    fn read_ty<R: Readable>(&mut self, endian: Endian) -> io::Result<R> {
20        R::read(self, endian)
21    }
22    #[inline(always)]
23    fn read_ty_be<R: Readable>(&mut self) -> io::Result<R> {
24        R::read(self, Endian::Big)
25    }
26    #[inline(always)]
27    fn read_ty_le<R: Readable>(&mut self) -> io::Result<R> {
28        R::read(self, Endian::Little)
29    }
30    #[inline(always)]
31    fn read_ty_ne<R: Readable>(&mut self) -> io::Result<R> {
32        R::read(self, Endian::Native)
33    }
34}