1e2687b83SHarlanC use { 2e2687b83SHarlanC failure::{Backtrace, Fail}, 388325f54SHarlanC bytesio::bytes_errors::{BytesReadError, BytesWriteError}, 4e2687b83SHarlanC std::fmt, 5e2687b83SHarlanC }; 6c2f3fbfaSHarlanC 7c2f3fbfaSHarlanC #[derive(Debug, Fail)] 8e1aaa799SHarlanC pub enum UnpackErrorValue { 969de9bbdSHarlanC #[fail(display = "bytes read error: {}", _0)] 104ff0d3acSHarlanC BytesReadError(BytesReadError), 11c2f3fbfaSHarlanC #[fail(display = "unknow read state")] 12e1aaa799SHarlanC UnknowReadState, 134745db95SHarlanC #[fail(display = "empty chunks")] 144745db95SHarlanC EmptyChunks, 15e1aaa799SHarlanC //IO(io::Error), 16*a4ef5d6cSHarlanC #[fail(display = "cannot parse")] 17*a4ef5d6cSHarlanC CannotParse, 18e1aaa799SHarlanC } 19e1aaa799SHarlanC 20c2f3fbfaSHarlanC #[derive(Debug)] 21e1aaa799SHarlanC pub struct UnpackError { 22e1aaa799SHarlanC pub value: UnpackErrorValue, 23e1aaa799SHarlanC } 24e1aaa799SHarlanC 25e1aaa799SHarlanC impl From<UnpackErrorValue> for UnpackError { from(val: UnpackErrorValue) -> Self26e1aaa799SHarlanC fn from(val: UnpackErrorValue) -> Self { 27e1aaa799SHarlanC UnpackError { value: val } 28e1aaa799SHarlanC } 29e1aaa799SHarlanC } 30e1aaa799SHarlanC 314ff0d3acSHarlanC impl From<BytesReadError> for UnpackError { from(error: BytesReadError) -> Self324ff0d3acSHarlanC fn from(error: BytesReadError) -> Self { 33e1aaa799SHarlanC UnpackError { 344ff0d3acSHarlanC value: UnpackErrorValue::BytesReadError(error), 35e1aaa799SHarlanC } 36e1aaa799SHarlanC } 37e1aaa799SHarlanC } 3863d2eb43SHarlanC 39c2f3fbfaSHarlanC #[derive(Debug, Fail)] 4063d2eb43SHarlanC pub enum PackErrorValue { 41c2f3fbfaSHarlanC #[fail(display = "not exist header")] 4263d2eb43SHarlanC NotExistHeader, 43c2f3fbfaSHarlanC #[fail(display = "unknow read state")] 4463d2eb43SHarlanC UnknowReadState, 4569de9bbdSHarlanC #[fail(display = "bytes writer error: {}", _0)] 4663d2eb43SHarlanC BytesWriteError(BytesWriteError), 4763d2eb43SHarlanC } 4863d2eb43SHarlanC 49c2f3fbfaSHarlanC #[derive(Debug)] 5063d2eb43SHarlanC pub struct PackError { 5163d2eb43SHarlanC pub value: PackErrorValue, 5263d2eb43SHarlanC } 5363d2eb43SHarlanC 5463d2eb43SHarlanC impl From<PackErrorValue> for PackError { from(val: PackErrorValue) -> Self5563d2eb43SHarlanC fn from(val: PackErrorValue) -> Self { 5663d2eb43SHarlanC PackError { value: val } 5763d2eb43SHarlanC } 5863d2eb43SHarlanC } 5963d2eb43SHarlanC 6063d2eb43SHarlanC impl From<BytesWriteError> for PackError { from(error: BytesWriteError) -> Self6163d2eb43SHarlanC fn from(error: BytesWriteError) -> Self { 6263d2eb43SHarlanC PackError { 6363d2eb43SHarlanC value: PackErrorValue::BytesWriteError(error), 6463d2eb43SHarlanC } 6563d2eb43SHarlanC } 6663d2eb43SHarlanC } 67c2f3fbfaSHarlanC 68c2f3fbfaSHarlanC impl fmt::Display for PackError { fmt(&self, f: &mut fmt::Formatter) -> fmt::Result69c2f3fbfaSHarlanC fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 70c2f3fbfaSHarlanC fmt::Display::fmt(&self.value, f) 71c2f3fbfaSHarlanC } 72c2f3fbfaSHarlanC } 73c2f3fbfaSHarlanC 74c2f3fbfaSHarlanC impl Fail for PackError { cause(&self) -> Option<&dyn Fail>75c2f3fbfaSHarlanC fn cause(&self) -> Option<&dyn Fail> { 76c2f3fbfaSHarlanC self.value.cause() 77c2f3fbfaSHarlanC } 78c2f3fbfaSHarlanC backtrace(&self) -> Option<&Backtrace>79c2f3fbfaSHarlanC fn backtrace(&self) -> Option<&Backtrace> { 80c2f3fbfaSHarlanC self.value.backtrace() 81c2f3fbfaSHarlanC } 82c2f3fbfaSHarlanC } 83c2f3fbfaSHarlanC 84c2f3fbfaSHarlanC impl fmt::Display for UnpackError { fmt(&self, f: &mut fmt::Formatter) -> fmt::Result85c2f3fbfaSHarlanC fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 86c2f3fbfaSHarlanC fmt::Display::fmt(&self.value, f) 87c2f3fbfaSHarlanC } 88c2f3fbfaSHarlanC } 89c2f3fbfaSHarlanC 90c2f3fbfaSHarlanC impl Fail for UnpackError { cause(&self) -> Option<&dyn Fail>91c2f3fbfaSHarlanC fn cause(&self) -> Option<&dyn Fail> { 92c2f3fbfaSHarlanC self.value.cause() 93c2f3fbfaSHarlanC } 94c2f3fbfaSHarlanC backtrace(&self) -> Option<&Backtrace>95c2f3fbfaSHarlanC fn backtrace(&self) -> Option<&Backtrace> { 96c2f3fbfaSHarlanC self.value.backtrace() 97c2f3fbfaSHarlanC } 98c2f3fbfaSHarlanC } 99