diff options
author | Valentin Popov <valentin@popov.link> | 2024-01-08 00:21:28 +0300 |
---|---|---|
committer | Valentin Popov <valentin@popov.link> | 2024-01-08 00:21:28 +0300 |
commit | 1b6a04ca5504955c571d1c97504fb45ea0befee4 (patch) | |
tree | 7579f518b23313e8a9748a88ab6173d5e030b227 /vendor/png/src/traits.rs | |
parent | 5ecd8cf2cba827454317368b68571df0d13d7842 (diff) | |
download | fparkan-1b6a04ca5504955c571d1c97504fb45ea0befee4.tar.xz fparkan-1b6a04ca5504955c571d1c97504fb45ea0befee4.zip |
Initial vendor packages
Signed-off-by: Valentin Popov <valentin@popov.link>
Diffstat (limited to 'vendor/png/src/traits.rs')
-rw-r--r-- | vendor/png/src/traits.rs | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/vendor/png/src/traits.rs b/vendor/png/src/traits.rs new file mode 100644 index 0000000..ffc10e7 --- /dev/null +++ b/vendor/png/src/traits.rs @@ -0,0 +1,43 @@ +use std::io; + +macro_rules! read_bytes_ext { + ($output_type:ty) => { + impl<W: io::Read + ?Sized> ReadBytesExt<$output_type> for W { + #[inline] + fn read_be(&mut self) -> io::Result<$output_type> { + let mut bytes = [0u8; std::mem::size_of::<$output_type>()]; + self.read_exact(&mut bytes)?; + Ok(<$output_type>::from_be_bytes(bytes)) + } + } + }; +} + +macro_rules! write_bytes_ext { + ($input_type:ty) => { + impl<W: io::Write + ?Sized> WriteBytesExt<$input_type> for W { + #[inline] + fn write_be(&mut self, n: $input_type) -> io::Result<()> { + self.write_all(&n.to_be_bytes()) + } + } + }; +} + +/// Read extension to read big endian data +pub trait ReadBytesExt<T>: io::Read { + /// Read `T` from a bytes stream. Most significant byte first. + fn read_be(&mut self) -> io::Result<T>; +} + +/// Write extension to write big endian data +pub trait WriteBytesExt<T>: io::Write { + /// Writes `T` to a bytes stream. Most significant byte first. + fn write_be(&mut self, _: T) -> io::Result<()>; +} + +read_bytes_ext!(u8); +read_bytes_ext!(u16); +read_bytes_ext!(u32); + +write_bytes_ext!(u32); |