1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
use derive_more::From;
use std::io;
#[derive(Debug)]
pub enum MqttError<E> {
Service(E),
PublishReadyError,
Decode(DecodeError),
Encode(EncodeError),
Unexpected(u8, &'static str),
PacketIdRequired,
DuplicatedPacketId,
KeepAliveTimeout,
HandshakeTimeout,
Disconnected,
Io(io::Error),
}
impl<E> From<DecodeError> for MqttError<E> {
fn from(err: DecodeError) -> Self {
MqttError::Decode(err)
}
}
impl<E> From<EncodeError> for MqttError<E> {
fn from(err: EncodeError) -> Self {
MqttError::Encode(err)
}
}
impl<E> From<io::Error> for MqttError<E> {
fn from(err: io::Error) -> Self {
MqttError::Io(err)
}
}
#[derive(Debug, From)]
pub enum DecodeError {
InvalidProtocol,
InvalidLength,
MalformedPacket,
UnsupportedProtocolLevel,
ConnectReservedFlagSet,
ConnAckReservedFlagSet,
InvalidClientId,
UnsupportedPacketType,
PacketIdRequired,
MaxSizeExceeded,
Io(io::Error),
Utf8Error(std::str::Utf8Error),
}
#[derive(Debug, From)]
pub enum EncodeError {
InvalidLength,
MalformedPacket,
PacketIdRequired,
Io(io::Error),
}
impl PartialEq for DecodeError {
fn eq(&self, other: &Self) -> bool {
match (self, other) {
(DecodeError::InvalidProtocol, DecodeError::InvalidProtocol) => true,
(DecodeError::InvalidLength, DecodeError::InvalidLength) => true,
(DecodeError::UnsupportedProtocolLevel, DecodeError::UnsupportedProtocolLevel) => {
true
}
(DecodeError::ConnectReservedFlagSet, DecodeError::ConnectReservedFlagSet) => true,
(DecodeError::ConnAckReservedFlagSet, DecodeError::ConnAckReservedFlagSet) => true,
(DecodeError::InvalidClientId, DecodeError::InvalidClientId) => true,
(DecodeError::UnsupportedPacketType, DecodeError::UnsupportedPacketType) => true,
(DecodeError::PacketIdRequired, DecodeError::PacketIdRequired) => true,
(DecodeError::MaxSizeExceeded, DecodeError::MaxSizeExceeded) => true,
(DecodeError::MalformedPacket, DecodeError::MalformedPacket) => true,
(DecodeError::Io(_), _) => false,
(DecodeError::Utf8Error(_), _) => false,
_ => false,
}
}
}