use std::io;
use std::task::{Context, Poll};
#[cfg(any(feature = "async", doc))]
#[cfg_attr(docsrs, doc(cfg(feature = "async")))]
pub use futures_io::AsyncRead;
#[cfg(any(feature = "async", doc))]
#[cfg_attr(docsrs, doc(cfg(feature = "async")))]
pub use futures_io::AsyncWrite;
#[cfg(feature = "async")]
#[cfg_attr(docsrs, doc(cfg(feature = "async")))]
pub use futures_util::AsyncWriteExt;
#[cfg(feature = "async")]
#[cfg_attr(docsrs, doc(cfg(feature = "async")))]
pub use futures_util::AsyncReadExt;
pub trait Ready {
fn poll_read_ready(&self, cx: &mut Context<'_>) -> Poll<io::Result<()>>;
fn poll_write_ready(&self, cx: &mut Context<'_>) -> Poll<io::Result<()>>;
fn poll_ready(&self, cx: &mut Context<'_>) -> Poll<io::Result<()>> {
if self.poll_read_ready(cx)?.is_ready() {
return Poll::Ready(Ok(()));
}
if self.poll_write_ready(cx)?.is_ready() {
return Poll::Ready(Ok(()));
}
Poll::Pending
}
}