use std::future::Future;
use crate::{
buf::{IoBuf, IoBufMut, IoVecBuf},
BufResult,
};
pub trait AsyncWriteRent {
fn write<T: IoBuf>(&mut self, buf: T) -> impl Future<Output = BufResult<usize, T>>;
fn writev<T: IoVecBuf>(&mut self, buf_vec: T) -> impl Future<Output = BufResult<usize, T>>;
fn flush(&mut self) -> impl Future<Output = std::io::Result<()>>;
fn shutdown(&mut self) -> impl Future<Output = std::io::Result<()>>;
}
pub trait AsyncWriteRentAt {
fn write_at<T: IoBufMut>(
&self,
buf: T,
pos: usize,
) -> impl Future<Output = BufResult<usize, T>>;
}
impl<A: ?Sized + AsyncWriteRent> AsyncWriteRent for &mut A {
#[inline]
fn write<T: IoBuf>(&mut self, buf: T) -> impl Future<Output = BufResult<usize, T>> {
(**self).write(buf)
}
#[inline]
fn writev<T: IoVecBuf>(&mut self, buf_vec: T) -> impl Future<Output = BufResult<usize, T>> {
(**self).writev(buf_vec)
}
#[inline]
fn flush(&mut self) -> impl Future<Output = std::io::Result<()>> {
(**self).flush()
}
#[inline]
fn shutdown(&mut self) -> impl Future<Output = std::io::Result<()>> {
(**self).shutdown()
}
}