mqtt/control/variable_header/
mod.rs1use std::io;
4use std::string::FromUtf8Error;
5
6use crate::topic_name::{TopicNameDecodeError, TopicNameError};
7
8pub use self::connect_ack_flags::ConnackFlags;
9pub use self::connect_flags::ConnectFlags;
10pub use self::connect_ret_code::ConnectReturnCode;
11pub use self::keep_alive::KeepAlive;
12pub use self::packet_identifier::PacketIdentifier;
13pub use self::protocol_level::ProtocolLevel;
14pub use self::protocol_name::ProtocolName;
15pub use self::topic_name::TopicNameHeader;
16
17mod connect_ack_flags;
18mod connect_flags;
19mod connect_ret_code;
20mod keep_alive;
21mod packet_identifier;
22pub mod protocol_level;
23mod protocol_name;
24mod topic_name;
25
26#[derive(Debug, thiserror::Error)]
28pub enum VariableHeaderError {
29 #[error(transparent)]
30 IoError(#[from] io::Error),
31 #[error("invalid reserved flags")]
32 InvalidReservedFlag,
33 #[error(transparent)]
34 FromUtf8Error(#[from] FromUtf8Error),
35 #[error(transparent)]
36 TopicNameError(#[from] TopicNameError),
37 #[error("invalid protocol version")]
38 InvalidProtocolVersion,
39}
40
41impl From<TopicNameDecodeError> for VariableHeaderError {
42 fn from(err: TopicNameDecodeError) -> VariableHeaderError {
43 match err {
44 TopicNameDecodeError::IoError(e) => Self::IoError(e),
45 TopicNameDecodeError::InvalidTopicName(e) => Self::TopicNameError(e),
46 }
47 }
48}