1use crate::stream;
4
5pub type ReadErrorFor<T> = <T as stream::Read>::Error;
7
8pub type WriteErrorFor<T> = <T as stream::Write>::Error;
10
11pub type ReadChunkErrorFor<T, Data> = <T as stream::ReadChunk<Data>>::Error;
13
14pub type WriteChunkErrorFor<T, Data> = <T as stream::WriteChunk<Data>>::Error;
16
17pub type ReadAbortErrorFor<T> = <T as stream::ReadAbort>::Error;
19
20pub type ReadAbortedErrorFor<T> = <T as stream::ReadAborted>::Error;
22
23pub type WriteAbortErrorFor<T> = <T as stream::WriteAbort>::Error;
25
26pub type WriteAbortedErrorFor<T> = <T as stream::WriteAborted>::Error;
28
29pub type FinishErrorFor<T> = <T as stream::Finish>::Error;
31
32pub type FinishedErrorFor<T> = <T as stream::Finished>::Error;
34
35pub trait ErrorAsErrorCodeExt: stream::ErrorAsErrorCode {
37 fn is_error_code(&self, expected_code: stream::ErrorCode) -> bool;
39
40 fn is_closed(&self) -> bool;
42}
43
44impl dyn ErrorAsErrorCodeExt {}
46
47impl<T> ErrorAsErrorCodeExt for T
48where
49 T: ?Sized + stream::ErrorAsErrorCode,
50{
51 fn is_error_code(&self, expected_error_code: stream::ErrorCode) -> bool {
52 let Some(error_code) = self.as_error_code() else {
53 return false;
54 };
55
56 error_code == expected_error_code
57 }
58
59 fn is_closed(&self) -> bool {
60 self.is_error_code(0)
61 }
62}