use std::future::Future;
use super::{AsyncReadRent, AsyncWriteRent, CancelHandle};
use crate::{
buf::{IoBuf, IoBufMut, IoVecBuf, IoVecBufMut},
BufResult,
};
pub trait CancelableAsyncReadRent: AsyncReadRent {
fn cancelable_read<T: IoBufMut>(
&mut self,
buf: T,
c: CancelHandle,
) -> impl Future<Output = BufResult<usize, T>>;
fn cancelable_readv<T: IoVecBufMut>(
&mut self,
buf: T,
c: CancelHandle,
) -> impl Future<Output = BufResult<usize, T>>;
}
impl<A: ?Sized + CancelableAsyncReadRent> CancelableAsyncReadRent for &mut A {
#[inline]
fn cancelable_read<T: IoBufMut>(
&mut self,
buf: T,
c: CancelHandle,
) -> impl Future<Output = BufResult<usize, T>> {
(**self).cancelable_read(buf, c)
}
#[inline]
fn cancelable_readv<T: IoVecBufMut>(
&mut self,
buf: T,
c: CancelHandle,
) -> impl Future<Output = BufResult<usize, T>> {
(**self).cancelable_readv(buf, c)
}
}
pub trait CancelableAsyncWriteRent: AsyncWriteRent {
fn cancelable_write<T: IoBuf>(
&mut self,
buf: T,
c: CancelHandle,
) -> impl Future<Output = BufResult<usize, T>>;
fn cancelable_writev<T: IoVecBuf>(
&mut self,
buf_vec: T,
c: CancelHandle,
) -> impl Future<Output = BufResult<usize, T>>;
fn cancelable_flush(&mut self, c: CancelHandle) -> impl Future<Output = std::io::Result<()>>;
fn cancelable_shutdown(&mut self, c: CancelHandle)
-> impl Future<Output = std::io::Result<()>>;
}
impl<A: ?Sized + CancelableAsyncWriteRent> CancelableAsyncWriteRent for &mut A {
#[inline]
fn cancelable_write<T: IoBuf>(
&mut self,
buf: T,
c: CancelHandle,
) -> impl Future<Output = BufResult<usize, T>> {
(**self).cancelable_write(buf, c)
}
#[inline]
fn cancelable_writev<T: IoVecBuf>(
&mut self,
buf_vec: T,
c: CancelHandle,
) -> impl Future<Output = BufResult<usize, T>> {
(**self).cancelable_writev(buf_vec, c)
}
#[inline]
fn cancelable_flush(&mut self, c: CancelHandle) -> impl Future<Output = std::io::Result<()>> {
(**self).cancelable_flush(c)
}
#[inline]
fn cancelable_shutdown(
&mut self,
c: CancelHandle,
) -> impl Future<Output = std::io::Result<()>> {
(**self).cancelable_shutdown(c)
}
}