use tokio::io::{AsyncRead, AsyncWrite};
mod read;
#[doc(inline)]
pub use read::{ChainReader, HeapReader, StackReader, discard};
mod prefix;
#[doc(inline)]
pub use prefix::PrefixedIo;
mod graceful;
pub use graceful::{CancelIo, GracefulIo};
pub mod peek;
pub mod rewind;
pub mod timeout;
mod bridge;
pub use bridge::BridgeIo;
mod owned;
#[doc(inline)]
pub use owned::{
ArrayBuf, AsyncReadOwned, AsyncWriteOwned, BufResult, BufSlot, IoBuf, IoBufMut, SetLen, Slice,
SplitIo, Uninit,
};
pub trait Io: AsyncRead + AsyncWrite + Send + 'static {}
impl<T> Io for T where T: AsyncRead + AsyncWrite + Send + 'static {}
pub trait PeekIoProvider: Send + 'static {
type PeekIo: Io;
type Mapped<PeekedIo: Io>: Send + 'static;
fn peek_io_mut(&mut self) -> &mut Self::PeekIo;
fn map_peek_io<PeekedIo, F>(self, map: F) -> Self::Mapped<PeekedIo>
where
PeekedIo: Io,
F: FnOnce(Self::PeekIo) -> PeekedIo;
}
impl<T: Io> PeekIoProvider for T {
type PeekIo = T;
type Mapped<PeekedIo: Io> = PeekedIo;
#[inline(always)]
fn peek_io_mut(&mut self) -> &mut Self::PeekIo {
self
}
#[inline(always)]
fn map_peek_io<PeekedIo, F>(self, map: F) -> Self::Mapped<PeekedIo>
where
PeekedIo: Io,
F: FnOnce(Self::PeekIo) -> PeekedIo,
{
map(self)
}
}