use crate::io::{ErrorKind, Read, Result, Write};
#[non_exhaustive]
#[derive(Clone, Copy, Debug, Default)]
pub struct Empty;
#[inline(always)]
#[must_use]
pub const fn empty() -> Empty {
Empty
}
impl Read for Empty {
#[inline]
fn read(&mut self, _buf: &mut [u8]) -> Result<usize> {
Ok(0)
}
#[inline]
fn read_exact(&mut self, buf: &mut [u8]) -> Result<()> {
if buf.is_empty() {
Ok(())
} else {
Err(ErrorKind::UnexpectedEof.into())
}
}
}
impl Write for Empty {
#[inline]
fn write(&mut self, buf: &[u8]) -> Result<usize> {
Ok(buf.len())
}
#[inline(always)]
fn write_all(&mut self, _buf: &[u8]) -> Result<()> {
Ok(())
}
#[inline(always)]
fn flush(&mut self) -> Result<()> {
Ok(())
}
}
impl Write for &Empty {
#[inline]
fn write(&mut self, buf: &[u8]) -> Result<usize> {
Ok(buf.len())
}
#[inline(always)]
fn write_all(&mut self, _buf: &[u8]) -> Result<()> {
Ok(())
}
#[inline(always)]
fn flush(&mut self) -> Result<()> {
Ok(())
}
}