use crate::stream;
pub type ReadErrorFor<T> = <T as stream::Read>::Error;
pub type WriteErrorFor<T> = <T as stream::Write>::Error;
pub type ReadChunkErrorFor<T, Data> = <T as stream::ReadChunk<Data>>::Error;
pub type WriteChunkErrorFor<T, Data> = <T as stream::WriteChunk<Data>>::Error;
pub type ReadAbortErrorFor<T> = <T as stream::ReadAbort>::Error;
pub type ReadAbortedErrorFor<T> = <T as stream::ReadAborted>::Error;
pub type WriteAbortErrorFor<T> = <T as stream::WriteAbort>::Error;
pub type WriteAbortedErrorFor<T> = <T as stream::WriteAborted>::Error;
pub type FinishErrorFor<T> = <T as stream::Finish>::Error;
pub type FinishedErrorFor<T> = <T as stream::Finished>::Error;
pub trait ErrorAsErrorCodeExt: stream::ErrorAsErrorCode {
fn is_error_code(&self, expected_code: stream::ErrorCode) -> bool;
fn is_closed(&self) -> bool;
}
impl dyn ErrorAsErrorCodeExt {}
impl<T> ErrorAsErrorCodeExt for T
where
T: ?Sized + stream::ErrorAsErrorCode,
{
fn is_error_code(&self, expected_error_code: stream::ErrorCode) -> bool {
let Some(error_code) = self.as_error_code() else {
return false;
};
error_code == expected_error_code
}
fn is_closed(&self) -> bool {
self.is_error_code(0)
}
}