1mod asyncdeserialize;
2mod asyncserialize;
3mod deserialize;
4mod packets;
5mod serialize;
6mod topic;
7
8pub mod codec;
9
10pub use asyncdeserialize::AsyncMqttRead;
11pub use asyncserialize::AsyncMqttWrite;
12pub use deserialize::MqttRead;
13pub use packets::*;
14pub use serialize::MqttWrite;
15pub use topic::*;
16
17use crate::Error;
18
19#[repr(u8)]
21#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd)]
22pub enum QoS {
23 AtMostOnce = 0,
24 AtLeastOnce = 1,
25 ExactlyOnce = 2,
26}
27
28#[repr(u8)]
29#[derive(Debug, Clone, Copy, PartialEq, Eq)]
30enum PacketType {
31 Connect = 1,
32 Connack,
33 Publish,
34 Puback,
35 Pubrec,
36 Pubrel,
37 Pubcomp,
38 Subscribe,
39 Suback,
40 Unsubscribe,
41 Unsuback,
42 Pingreq,
43 Pingresp,
44 Disconnect,
45}
46
47#[derive(Debug, Clone, PartialEq)]
49pub enum Packet {
50 Connect(Connect),
51 Connack(Connack),
52 Publish(Publish),
53 Puback(PacketIdentifier),
54 Pubrec(PacketIdentifier),
55 Pubrel(PacketIdentifier),
56 Pubcomp(PacketIdentifier),
57 Subscribe(Subscribe),
58 Suback(Suback),
59 Unsubscribe(Unsubscribe),
60 Unsuback(PacketIdentifier),
61 Pingreq,
62 Pingresp,
63 Disconnect,
64}
65
66fn qos(num: u8) -> Result<QoS, Error> {
76 match num {
77 0 => Ok(QoS::AtMostOnce),
78 1 => Ok(QoS::AtLeastOnce),
79 2 => Ok(QoS::ExactlyOnce),
80 _ => Err(Error::UnsupportedQoS),
81 }
82}
83
84fn packet_type(num: u8) -> Result<PacketType, Error> {
85 match num {
86 1 => Ok(PacketType::Connect),
87 2 => Ok(PacketType::Connack),
88 3 => Ok(PacketType::Publish),
89 4 => Ok(PacketType::Puback),
90 5 => Ok(PacketType::Pubrec),
91 6 => Ok(PacketType::Pubrel),
92 7 => Ok(PacketType::Pubcomp),
93 8 => Ok(PacketType::Subscribe),
94 9 => Ok(PacketType::Suback),
95 10 => Ok(PacketType::Unsubscribe),
96 11 => Ok(PacketType::Unsuback),
97 12 => Ok(PacketType::Pingreq),
98 13 => Ok(PacketType::Pingresp),
99 14 => Ok(PacketType::Disconnect),
100 _ => Err(Error::UnsupportedPacketType(num)),
101 }
102}
103
104fn connect_return(num: u8) -> Result<ConnectReturnCode, Error> {
105 match num {
106 0 => Ok(ConnectReturnCode::Accepted),
107 1 => Ok(ConnectReturnCode::BadUsernamePassword),
108 2 => Ok(ConnectReturnCode::NotAuthorized),
109 3 => Ok(ConnectReturnCode::RefusedIdentifierRejected),
110 4 => Ok(ConnectReturnCode::RefusedProtocolVersion),
111 5 => Ok(ConnectReturnCode::ServerUnavailable),
112 _ => Err(Error::InvalidConnectReturnCode(num)),
113 }
114}