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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
use std::convert::From; use std::error::Error; use std::io; use std::fmt; use std::string::FromUtf8Error; use byteorder; use encodable::StringEncodeError; use topic_name::TopicNameError; pub use self::packet_identifier::PacketIdentifier; pub use self::protocol_name::ProtocolName; pub use self::protocol_level::ProtocolLevel; pub use self::connect_flags::ConnectFlags; pub use self::keep_alive::KeepAlive; pub use self::connect_ack_flags::ConnackFlags; pub use self::connect_ret_code::ConnectReturnCode; pub use self::topic_name::TopicNameHeader; pub mod packet_identifier; pub mod protocol_name; pub mod protocol_level; pub mod connect_flags; pub mod keep_alive; pub mod connect_ack_flags; pub mod connect_ret_code; pub mod topic_name; #[derive(Debug)] pub enum VariableHeaderError { IoError(io::Error), StringEncodeError(StringEncodeError), InvalidReservedFlag, FromUtf8Error(FromUtf8Error), TopicNameError(TopicNameError), } impl From<io::Error> for VariableHeaderError { fn from(err: io::Error) -> VariableHeaderError { VariableHeaderError::IoError(err) } } impl From<byteorder::Error> for VariableHeaderError { fn from(err: byteorder::Error) -> VariableHeaderError { VariableHeaderError::IoError(From::from(err)) } } impl From<FromUtf8Error> for VariableHeaderError { fn from(err: FromUtf8Error) -> VariableHeaderError { VariableHeaderError::FromUtf8Error(err) } } impl From<StringEncodeError> for VariableHeaderError { fn from(err: StringEncodeError) -> VariableHeaderError { VariableHeaderError::StringEncodeError(err) } } impl From<TopicNameError> for VariableHeaderError { fn from(err: TopicNameError) -> VariableHeaderError { VariableHeaderError::TopicNameError(err) } } impl fmt::Display for VariableHeaderError { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { match self { &VariableHeaderError::IoError(ref err) => write!(f, "{}", err), &VariableHeaderError::StringEncodeError(ref err) => write!(f, "{}", err), &VariableHeaderError::InvalidReservedFlag => write!(f, "Invalid reserved flags"), &VariableHeaderError::FromUtf8Error(ref err) => write!(f, "{}", err), &VariableHeaderError::TopicNameError(ref err) => write!(f, "{}", err), } } } impl Error for VariableHeaderError { fn description(&self) -> &str { match self { &VariableHeaderError::IoError(ref err) => err.description(), &VariableHeaderError::StringEncodeError(ref err) => err.description(), &VariableHeaderError::InvalidReservedFlag => "Invalid reserved flags", &VariableHeaderError::FromUtf8Error(ref err) => err.description(), &VariableHeaderError::TopicNameError(ref err) => err.description(), } } fn cause(&self) -> Option<&Error> { match self { &VariableHeaderError::IoError(ref err) => Some(err), &VariableHeaderError::StringEncodeError(ref err) => Some(err), &VariableHeaderError::InvalidReservedFlag => None, &VariableHeaderError::FromUtf8Error(ref err) => Some(err), &VariableHeaderError::TopicNameError(ref err) => Some(err), } } }