use std::io::{
Result,
Write,
};
pub trait WriteExt: Write {
unsafe fn write_unchecked(
&mut self,
buffer: &[u8],
start_index: usize,
count: usize,
) -> Result<usize> {
debug_assert!(
start_index
.checked_add(count)
.is_some_and(|end_index| end_index <= buffer.len()),
"unchecked write range exceeds buffer"
);
let source = unsafe {
core::slice::from_raw_parts(buffer.as_ptr().add(start_index), count)
};
self.write(source)
}
unsafe fn write_all_unchecked(
&mut self,
buffer: &[u8],
start_index: usize,
count: usize,
) -> Result<()> {
debug_assert!(
start_index
.checked_add(count)
.is_some_and(|end_index| end_index <= buffer.len()),
"unchecked write range exceeds buffer"
);
let source = unsafe {
core::slice::from_raw_parts(buffer.as_ptr().add(start_index), count)
};
self.write_all(source)
}
}
impl<T> WriteExt for T where T: Write + ?Sized {}