mqtt/control/variable_header/
mod.rs

1//! Variable header in MQTT
2
3use 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/// Errors while decoding variable header
27#[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}