1use thiserror::Error;
2
3use super::{PacketType, PropertyId};
4
5#[derive(Error, Debug, Clone, PartialEq, Eq)]
7pub enum ErrorV5 {
8 #[error("common error of v3/v5: {0}")]
10 Common(#[from] crate::Error),
11
12 #[error("invalid reason code `{1}` for packet `{0}`")]
14 InvalidReasonCode(PacketType, u8),
15
16 #[error("invalid subscription option: `{0}`")]
18 InvalidSubscriptionOption(u8),
19
20 #[error("invalid payload format, utf8 expected")]
22 InvalidPayloadFormat,
23
24 #[error("invalid response topic")]
26 InvalidResponseTopic,
27
28 #[error("invalid property identifier: `{0}`")]
30 InvalidPropertyId(u8),
31
32 #[error("invalid property length: `{0}`")]
34 InvalidPropertyLength(u32),
35
36 #[error("invalid byte value `{1}` for property `{0}`")]
38 InvalidByteProperty(PropertyId, u8),
39
40 #[error("duplicated property: `{0}`")]
42 DuplicatedProperty(PropertyId),
43
44 #[error("invalid property `{1}` for packet `{0}`")]
46 InvalidProperty(PacketType, PropertyId),
47
48 #[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}