use compio_buf::{BufResult, IoBufMut};
use crate::{AsyncBufRead, AsyncRead, AsyncWrite, IoResult};
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct Null {
_p: (),
}
impl AsyncRead for Null {
async fn read<B: IoBufMut>(&mut self, buf: B) -> compio_buf::BufResult<usize, B> {
BufResult(Ok(0), buf)
}
}
impl AsyncBufRead for Null {
async fn fill_buf(&mut self) -> IoResult<&'_ [u8]> {
Ok(&[])
}
fn consume(&mut self, _: usize) {}
}
impl AsyncWrite for Null {
async fn write<T: compio_buf::IoBuf>(&mut self, buf: T) -> BufResult<usize, T> {
BufResult(Ok(0), buf)
}
async fn write_vectored<T: compio_buf::IoVectoredBuf>(
&mut self,
buf: T,
) -> BufResult<usize, T> {
BufResult(Ok(0), buf)
}
async fn flush(&mut self) -> IoResult<()> {
Ok(())
}
async fn shutdown(&mut self) -> IoResult<()> {
Ok(())
}
}
#[inline(always)]
pub fn null() -> Null {
Null { _p: () }
}