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