1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
use failure::{Backtrace, Fail}; use std::fmt; use networkio::bytes_errors::BytesReadError; #[derive(Debug, Fail)] pub enum TagParseErrorValue { #[fail(display = "bytes read error\n")] BytesReadError(BytesReadError), #[fail(display = "tag data length error\n")] TagDataLength, } #[derive(Debug)] pub struct TagParseError { pub value: TagParseErrorValue, } impl From<BytesReadError> for TagParseError { fn from(error: BytesReadError) -> Self { TagParseError { value: TagParseErrorValue::BytesReadError(error), } } } impl fmt::Display for TagParseError { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { fmt::Display::fmt(&self.value, f) } } impl Fail for TagParseError { fn cause(&self) -> Option<&dyn Fail> { self.value.cause() } fn backtrace(&self) -> Option<&Backtrace> { self.value.backtrace() } }