xref: /xiu/library/bytesio/src/bytes_errors.rs (revision 69de9bbd)
188325f54SHarlanC use super::bytesio_errors::BytesIOError;
288325f54SHarlanC use std::io;
388325f54SHarlanC // use tokio::time::Elapsed;
488325f54SHarlanC 
588325f54SHarlanC use failure::{Backtrace, Fail};
688325f54SHarlanC use std::fmt;
788325f54SHarlanC 
888325f54SHarlanC #[derive(Debug, Fail)]
988325f54SHarlanC pub enum BytesReadErrorValue {
1088325f54SHarlanC     #[fail(display = "not enough bytes to read")]
1188325f54SHarlanC     NotEnoughBytes,
1288325f54SHarlanC     #[fail(display = "empty stream")]
1388325f54SHarlanC     EmptyStream,
14*69de9bbdSHarlanC     #[fail(display = "io error: {}", _0)]
1588325f54SHarlanC     IO(#[cause] io::Error),
16a4440553SHarlanC     #[fail(display = "index out of range")]
17a4440553SHarlanC     IndexOutofRange,
18*69de9bbdSHarlanC     #[fail(display = "bytesio read error: {}", _0)]
198e71d710SHarlan     BytesIOError(BytesIOError),
20*69de9bbdSHarlanC     // #[fail(display = "elapsed: {}", _0)]
2188325f54SHarlanC     // TimeoutError(#[cause] Elapsed),
2288325f54SHarlanC }
2388325f54SHarlanC 
2488325f54SHarlanC #[derive(Debug)]
2588325f54SHarlanC pub struct BytesReadError {
2688325f54SHarlanC     pub value: BytesReadErrorValue,
2788325f54SHarlanC }
2888325f54SHarlanC 
2988325f54SHarlanC impl From<BytesReadErrorValue> for BytesReadError {
from(val: BytesReadErrorValue) -> Self3088325f54SHarlanC     fn from(val: BytesReadErrorValue) -> Self {
3188325f54SHarlanC         BytesReadError { value: val }
3288325f54SHarlanC     }
3388325f54SHarlanC }
3488325f54SHarlanC 
3588325f54SHarlanC impl From<io::Error> for BytesReadError {
from(error: io::Error) -> Self3688325f54SHarlanC     fn from(error: io::Error) -> Self {
3788325f54SHarlanC         BytesReadError {
3888325f54SHarlanC             value: BytesReadErrorValue::IO(error),
3988325f54SHarlanC         }
4088325f54SHarlanC     }
4188325f54SHarlanC }
4288325f54SHarlanC 
438e71d710SHarlan impl From<BytesIOError> for BytesReadError {
from(error: BytesIOError) -> Self448e71d710SHarlan     fn from(error: BytesIOError) -> Self {
458e71d710SHarlan         BytesReadError {
468e71d710SHarlan             value: BytesReadErrorValue::BytesIOError(error),
478e71d710SHarlan         }
488e71d710SHarlan     }
498e71d710SHarlan }
508e71d710SHarlan 
5188325f54SHarlanC // impl From<Elapsed> for BytesReadError {
5288325f54SHarlanC //     fn from(error: Elapsed) -> Self {
5388325f54SHarlanC //         BytesReadError {
5488325f54SHarlanC //             value: BytesReadErrorValue::TimeoutError(error),
5588325f54SHarlanC //         }
5688325f54SHarlanC //     }
5788325f54SHarlanC // }
5888325f54SHarlanC 
5988325f54SHarlanC #[derive(Debug)]
6088325f54SHarlanC pub struct BytesWriteError {
6188325f54SHarlanC     pub value: BytesWriteErrorValue,
6288325f54SHarlanC }
6388325f54SHarlanC 
6488325f54SHarlanC #[derive(Debug, Fail)]
6588325f54SHarlanC pub enum BytesWriteErrorValue {
66*69de9bbdSHarlanC     #[fail(display = "io error")]
6788325f54SHarlanC     IO(io::Error),
68*69de9bbdSHarlanC     #[fail(display = "bytes io error: {}", _0)]
6988325f54SHarlanC     BytesIOError(BytesIOError),
7088325f54SHarlanC     #[fail(display = "write time out")]
7188325f54SHarlanC     Timeout,
7288325f54SHarlanC     #[fail(display = "outof index")]
7388325f54SHarlanC     OutofIndex,
7488325f54SHarlanC }
7588325f54SHarlanC 
7688325f54SHarlanC impl From<io::Error> for BytesWriteError {
from(error: io::Error) -> Self7788325f54SHarlanC     fn from(error: io::Error) -> Self {
7888325f54SHarlanC         BytesWriteError {
7988325f54SHarlanC             value: BytesWriteErrorValue::IO(error),
8088325f54SHarlanC         }
8188325f54SHarlanC     }
8288325f54SHarlanC }
8388325f54SHarlanC 
8488325f54SHarlanC impl From<BytesIOError> for BytesWriteError {
from(error: BytesIOError) -> Self8588325f54SHarlanC     fn from(error: BytesIOError) -> Self {
8688325f54SHarlanC         BytesWriteError {
8788325f54SHarlanC             value: BytesWriteErrorValue::BytesIOError(error),
8888325f54SHarlanC         }
8988325f54SHarlanC     }
9088325f54SHarlanC }
9188325f54SHarlanC 
9288325f54SHarlanC impl fmt::Display for BytesReadError {
fmt(&self, f: &mut fmt::Formatter) -> fmt::Result9388325f54SHarlanC     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
9488325f54SHarlanC         fmt::Display::fmt(&self.value, f)
9588325f54SHarlanC     }
9688325f54SHarlanC }
9788325f54SHarlanC 
9888325f54SHarlanC impl Fail for BytesReadError {
cause(&self) -> Option<&dyn Fail>9988325f54SHarlanC     fn cause(&self) -> Option<&dyn Fail> {
10088325f54SHarlanC         self.value.cause()
10188325f54SHarlanC     }
10288325f54SHarlanC 
backtrace(&self) -> Option<&Backtrace>10388325f54SHarlanC     fn backtrace(&self) -> Option<&Backtrace> {
10488325f54SHarlanC         self.value.backtrace()
10588325f54SHarlanC     }
10688325f54SHarlanC }
10788325f54SHarlanC 
10888325f54SHarlanC impl fmt::Display for BytesWriteError {
fmt(&self, f: &mut fmt::Formatter) -> fmt::Result10988325f54SHarlanC     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
11088325f54SHarlanC         fmt::Display::fmt(&self.value, f)
11188325f54SHarlanC     }
11288325f54SHarlanC }
11388325f54SHarlanC 
11488325f54SHarlanC impl Fail for BytesWriteError {
cause(&self) -> Option<&dyn Fail>11588325f54SHarlanC     fn cause(&self) -> Option<&dyn Fail> {
11688325f54SHarlanC         self.value.cause()
11788325f54SHarlanC     }
11888325f54SHarlanC 
backtrace(&self) -> Option<&Backtrace>11988325f54SHarlanC     fn backtrace(&self) -> Option<&Backtrace> {
12088325f54SHarlanC         self.value.backtrace()
12188325f54SHarlanC     }
12288325f54SHarlanC }
123