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