Skip to main content

rw_types/write/
ext.rs

1use std::io;
2
3use crate::{Endian, write::Writable};
4
5/// An extension to the [`io::Write`] trait.
6pub trait WriteExt: io::Write {
7    /// Writes `W` with the specified endian.
8    fn write_ty<W: Writable>(&mut self, value: &W, endian: Endian) -> io::Result<()>;
9    /// Writes `W` with big endian.
10    fn write_ty_be<W: Writable>(&mut self, value: &W) -> io::Result<()>;
11    /// Writes `W` with little endian.
12    fn write_ty_le<W: Writable>(&mut self, value: &W) -> io::Result<()>;
13    /// Writes `W` with native endian.
14    fn write_ty_ne<W: Writable>(&mut self, value: &W) -> io::Result<()>;
15}
16
17impl<T: io::Write> WriteExt for T {
18    #[inline(always)]
19    fn write_ty<W: Writable>(&mut self, value: &W, endian: Endian) -> io::Result<()> {
20        value.write(self, endian)
21    }
22    #[inline(always)]
23    fn write_ty_be<W: Writable>(&mut self, value: &W) -> io::Result<()> {
24        value.write(self, Endian::Big)
25    }
26    #[inline(always)]
27    fn write_ty_le<W: Writable>(&mut self, value: &W) -> io::Result<()> {
28        value.write(self, Endian::Little)
29    }
30    #[inline(always)]
31    fn write_ty_ne<W: Writable>(&mut self, value: &W) -> io::Result<()> {
32        value.write(self, Endian::Native)
33    }
34}