1 use { 2 failure::{Backtrace, Fail}, 3 bytesio::bytes_errors::{BytesReadError, BytesWriteError}, 4 std::fmt, 5 }; 6 7 #[derive(Debug, Fail)] 8 pub enum UnpackErrorValue { 9 #[fail(display = "bytes read error: {}", _0)] 10 BytesReadError(BytesReadError), 11 #[fail(display = "unknow read state")] 12 UnknowReadState, 13 #[fail(display = "empty chunks")] 14 EmptyChunks, 15 //IO(io::Error), 16 #[fail(display = "cannot parse")] 17 CannotParse, 18 } 19 20 #[derive(Debug)] 21 pub struct UnpackError { 22 pub value: UnpackErrorValue, 23 } 24 25 impl From<UnpackErrorValue> for UnpackError { from(val: UnpackErrorValue) -> Self26 fn from(val: UnpackErrorValue) -> Self { 27 UnpackError { value: val } 28 } 29 } 30 31 impl From<BytesReadError> for UnpackError { from(error: BytesReadError) -> Self32 fn from(error: BytesReadError) -> Self { 33 UnpackError { 34 value: UnpackErrorValue::BytesReadError(error), 35 } 36 } 37 } 38 39 #[derive(Debug, Fail)] 40 pub enum PackErrorValue { 41 #[fail(display = "not exist header")] 42 NotExistHeader, 43 #[fail(display = "unknow read state")] 44 UnknowReadState, 45 #[fail(display = "bytes writer error: {}", _0)] 46 BytesWriteError(BytesWriteError), 47 } 48 49 #[derive(Debug)] 50 pub struct PackError { 51 pub value: PackErrorValue, 52 } 53 54 impl From<PackErrorValue> for PackError { from(val: PackErrorValue) -> Self55 fn from(val: PackErrorValue) -> Self { 56 PackError { value: val } 57 } 58 } 59 60 impl From<BytesWriteError> for PackError { from(error: BytesWriteError) -> Self61 fn from(error: BytesWriteError) -> Self { 62 PackError { 63 value: PackErrorValue::BytesWriteError(error), 64 } 65 } 66 } 67 68 impl fmt::Display for PackError { fmt(&self, f: &mut fmt::Formatter) -> fmt::Result69 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 70 fmt::Display::fmt(&self.value, f) 71 } 72 } 73 74 impl Fail for PackError { cause(&self) -> Option<&dyn Fail>75 fn cause(&self) -> Option<&dyn Fail> { 76 self.value.cause() 77 } 78 backtrace(&self) -> Option<&Backtrace>79 fn backtrace(&self) -> Option<&Backtrace> { 80 self.value.backtrace() 81 } 82 } 83 84 impl fmt::Display for UnpackError { fmt(&self, f: &mut fmt::Formatter) -> fmt::Result85 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 86 fmt::Display::fmt(&self.value, f) 87 } 88 } 89 90 impl Fail for UnpackError { cause(&self) -> Option<&dyn Fail>91 fn cause(&self) -> Option<&dyn Fail> { 92 self.value.cause() 93 } 94 backtrace(&self) -> Option<&Backtrace>95 fn backtrace(&self) -> Option<&Backtrace> { 96 self.value.backtrace() 97 } 98 } 99