mqtt_proto/v5/
error.rs

1use thiserror::Error;
2
3use super::{PacketType, PropertyId};
4
5/// MQTT v5.0 errors returned by encoding and decoding process.
6#[derive(Error, Debug, Clone, PartialEq, Eq)]
7pub enum ErrorV5 {
8    /// Common error of MQTT v3 and v5.
9    #[error("common error of v3/v5: {0}")]
10    Common(#[from] crate::Error),
11
12    /// Invalid reason code.
13    #[error("invalid reason code `{1}` for packet `{0}`")]
14    InvalidReasonCode(PacketType, u8),
15
16    /// Invalid subscription option.
17    #[error("invalid subscription option: `{0}`")]
18    InvalidSubscriptionOption(u8),
19
20    /// Invalid payload format, utf8 expected
21    #[error("invalid payload format, utf8 expected")]
22    InvalidPayloadFormat,
23
24    /// Invalid response topic name
25    #[error("invalid response topic")]
26    InvalidResponseTopic,
27
28    /// Invalid property identifier.
29    #[error("invalid property identifier: `{0}`")]
30    InvalidPropertyId(u8),
31
32    /// Invalid property length.
33    #[error("invalid property length: `{0}`")]
34    InvalidPropertyLength(u32),
35
36    /// Invalid byte property value.
37    #[error("invalid byte value `{1}` for property `{0}`")]
38    InvalidByteProperty(PropertyId, u8),
39
40    /// Duplicated property.
41    #[error("duplicated property: `{0}`")]
42    DuplicatedProperty(PropertyId),
43
44    /// Invalid property.
45    #[error("invalid property `{1}` for packet `{0}`")]
46    InvalidProperty(PacketType, PropertyId),
47
48    /// Invalid will property (connect packet).
49    #[error("invalid will property: `{0}`")]
50    InvalidWillProperty(PropertyId),
51}
52
53impl ErrorV5 {
54    pub fn is_eof(&self) -> bool {
55        if let ErrorV5::Common(e) = self {
56            e.is_eof()
57        } else {
58            false
59        }
60    }
61}
62
63impl<E: embedded_io::Error> From<E> for ErrorV5 {
64    fn from(err: E) -> ErrorV5 {
65        ErrorV5::Common(err.into())
66    }
67}