use std::io::Result;
use std::io::Write;
use crate::Output;
use crate::traits::validate_write_count;
use crate::util::UncheckedSlice;
impl<W> Output for W
where
W: Write + ?Sized,
{
type Item = u8;
#[inline(always)]
unsafe fn write_unchecked(&mut self, input: &[u8], index: usize, count: usize) -> Result<usize> {
let source = unsafe { UncheckedSlice::subslice(input, index, count) };
Write::write(self, source)
}
#[inline(always)]
fn write(&mut self, input: &[Self::Item]) -> Result<usize> {
let written = Write::write(self, input)?;
validate_write_count(written, input.len())?;
Ok(written)
}
fn write_vectored(&mut self, buffers: &[&[u8]]) -> Result<usize> {
let capacity = crate::util::requested_items(buffers.iter().map(|buffer| buffer.len()))?;
if capacity == 0 {
return Ok(0);
}
let slices = crate::util::io_slices(buffers)?;
let count = Write::write_vectored(self, &slices)?;
validate_write_count(count, capacity)?;
Ok(count)
}
#[inline(always)]
fn flush(&mut self) -> Result<()> {
Write::flush(self)
}
}