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