18e71d710SHarlan use { 28e71d710SHarlan failure::{Backtrace, Fail}, 38e71d710SHarlan std::fmt, 48e71d710SHarlan }; 58e71d710SHarlan 68e71d710SHarlan use bytesio::bytes_errors::BytesReadError; 78e71d710SHarlan use bytesio::bytes_errors::BytesWriteError; 88e71d710SHarlan 98e71d710SHarlan #[derive(Debug)] 108e71d710SHarlan pub struct PackerError { 118e71d710SHarlan pub value: PackerErrorValue, 128e71d710SHarlan } 138e71d710SHarlan 148e71d710SHarlan impl Fail for PackerError { cause(&self) -> Option<&dyn Fail>158e71d710SHarlan fn cause(&self) -> Option<&dyn Fail> { 168e71d710SHarlan self.value.cause() 178e71d710SHarlan } 188e71d710SHarlan backtrace(&self) -> Option<&Backtrace>198e71d710SHarlan fn backtrace(&self) -> Option<&Backtrace> { 208e71d710SHarlan self.value.backtrace() 218e71d710SHarlan } 228e71d710SHarlan } 238e71d710SHarlan 248e71d710SHarlan impl fmt::Display for PackerError { fmt(&self, f: &mut fmt::Formatter) -> fmt::Result258e71d710SHarlan fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 268e71d710SHarlan fmt::Display::fmt(&self.value, f) 278e71d710SHarlan } 288e71d710SHarlan } 298e71d710SHarlan 308e71d710SHarlan #[derive(Debug, Fail)] 318e71d710SHarlan pub enum PackerErrorValue { 32*69de9bbdSHarlanC #[fail(display = "bytes read error: {}", _0)] 338e71d710SHarlan BytesReadError(BytesReadError), 34*69de9bbdSHarlanC #[fail(display = "bytes write error: {}", _0)] 358e71d710SHarlan BytesWriteError(#[cause] BytesWriteError), 368e71d710SHarlan } 378e71d710SHarlan 388e71d710SHarlan impl From<BytesReadError> for PackerError { from(error: BytesReadError) -> Self398e71d710SHarlan fn from(error: BytesReadError) -> Self { 408e71d710SHarlan PackerError { 418e71d710SHarlan value: PackerErrorValue::BytesReadError(error), 428e71d710SHarlan } 438e71d710SHarlan } 448e71d710SHarlan } 458e71d710SHarlan 468e71d710SHarlan impl From<BytesWriteError> for PackerError { from(error: BytesWriteError) -> Self478e71d710SHarlan fn from(error: BytesWriteError) -> Self { 488e71d710SHarlan PackerError { 498e71d710SHarlan value: PackerErrorValue::BytesWriteError(error), 508e71d710SHarlan } 518e71d710SHarlan } 528e71d710SHarlan } 538e71d710SHarlan 548e71d710SHarlan #[derive(Debug)] 558e71d710SHarlan pub struct UnPackerError { 568e71d710SHarlan pub value: UnPackerErrorValue, 578e71d710SHarlan } 588e71d710SHarlan 598e71d710SHarlan #[derive(Debug, Fail)] 608e71d710SHarlan pub enum UnPackerErrorValue { 61*69de9bbdSHarlanC #[fail(display = "bytes read error: {}", _0)] 628e71d710SHarlan BytesReadError(BytesReadError), 63*69de9bbdSHarlanC #[fail(display = "bytes write error: {}", _0)] 648e71d710SHarlan BytesWriteError(#[cause] BytesWriteError), 658e71d710SHarlan } 668e71d710SHarlan 678e71d710SHarlan impl From<BytesReadError> for UnPackerError { from(error: BytesReadError) -> Self688e71d710SHarlan fn from(error: BytesReadError) -> Self { 698e71d710SHarlan UnPackerError { 708e71d710SHarlan value: UnPackerErrorValue::BytesReadError(error), 718e71d710SHarlan } 728e71d710SHarlan } 738e71d710SHarlan } 748e71d710SHarlan 758e71d710SHarlan impl From<BytesWriteError> for UnPackerError { from(error: BytesWriteError) -> Self768e71d710SHarlan fn from(error: BytesWriteError) -> Self { 778e71d710SHarlan UnPackerError { 788e71d710SHarlan value: UnPackerErrorValue::BytesWriteError(error), 798e71d710SHarlan } 808e71d710SHarlan } 818e71d710SHarlan } 82b36cf5daSHarlan 83b36cf5daSHarlan impl fmt::Display for UnPackerError { fmt(&self, f: &mut fmt::Formatter) -> fmt::Result84b36cf5daSHarlan fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 85b36cf5daSHarlan fmt::Display::fmt(&self.value, f) 86b36cf5daSHarlan } 87b36cf5daSHarlan } 88b36cf5daSHarlan 89b36cf5daSHarlan impl Fail for UnPackerError { cause(&self) -> Option<&dyn Fail>90b36cf5daSHarlan fn cause(&self) -> Option<&dyn Fail> { 91b36cf5daSHarlan self.value.cause() 92b36cf5daSHarlan } 93b36cf5daSHarlan backtrace(&self) -> Option<&Backtrace>94b36cf5daSHarlan fn backtrace(&self) -> Option<&Backtrace> { 95b36cf5daSHarlan self.value.backtrace() 96b36cf5daSHarlan } 97b36cf5daSHarlan } 98