mqtt_proto/v5/
error.rs

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