use std::io::{Result, Write};
macro_rules! impl_write {
($($type:ty),*) => {
$(
paste::paste! {
#[inline]
fn [<write_ $type _ne>](&mut self, value: $type) -> usize {
self.write(&value.to_ne_bytes()).expect("Write failed")
}
#[inline]
fn [<write_ $type _ne_checked>](&mut self, value: $type) -> Result<usize> {
self.write(&value.to_ne_bytes())
}
#[inline]
fn [<write_ $type>](&mut self, value: $type) -> usize {
self.write(&value.to_be_bytes()).expect("Write failed")
}
#[inline]
fn [<write_ $type _checked>](&mut self, value: $type) -> Result<usize> {
self.write(&value.to_be_bytes())
}
#[inline]
fn [<write_ $type _le>](&mut self, value: $type) -> usize {
self.write(&value.to_le_bytes()).expect("Write failed")
}
#[inline]
fn [<write_ $type _le_checked>](&mut self, value: $type) -> Result<usize> {
self.write(&value.to_le_bytes())
}
}
)*
};
}
pub trait WriteExt: Write {
#[inline]
fn write_u8(&mut self, value: u8) -> usize {
self.write(std::slice::from_ref(&value)).expect("Write failed")
}
#[inline]
fn write_u8_checked(&mut self, value: u8) -> Result<usize> {
self.write(std::slice::from_ref(&value))
}
impl_write!(f32 , f64, u16, i16, u32, i32, u64, i64, u128, i128);
}
impl<W> WriteExt for W
where
W: Write
{ }