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