RustMqtt/
mqtt.rs

1use std::sync::Arc;
2use super::{QoS, LastWill, PacketIdentifier, Protocol, ConnectReturnCode};
3
4#[derive(Debug, Clone, PartialEq)]
5pub enum Packet {
6	Connect(Box<Connect>),
7	Connack(Connack),
8	Publish(Box<Publish>),
9	Puback(PacketIdentifier),
10	Pubrec(PacketIdentifier),
11	Pubrel(PacketIdentifier),
12	Pubcomp(PacketIdentifier),
13	Subscribe(Box<Subscribe>),
14	Suback(Box<Suback>),
15	Unsubscribe(Box<Unsubscribe>),
16	Unsuback(PacketIdentifier),
17	Pingreq,
18	Pingresp,
19	Disconnect
20}
21
22#[derive(Debug, Clone, PartialEq)]
23pub struct Connect {
24	pub protocol: Protocol,
25    pub keep_alive: u16,
26    pub client_id: String,
27	pub clean_session: bool,
28    pub last_will: Option<LastWill>,
29    pub username: Option<String>,
30    pub password: Option<String>
31}
32
33#[derive(Debug, Clone, Copy, PartialEq)]
34pub struct Connack {
35    pub session_present: bool,
36    pub code: ConnectReturnCode
37}
38
39#[derive(Debug, Clone, PartialEq)]
40pub struct Publish {
41    pub dup: bool,
42    pub qos: QoS,
43    pub retain: bool,
44    pub topic_name: String,
45    pub pid: Option<PacketIdentifier>,
46    pub payload: Arc<Vec<u8>>
47}
48
49#[derive(Debug, Clone, PartialEq)]
50pub struct Subscribe {
51    pub pid: PacketIdentifier,
52	// (topic path, qos)
53	pub topics: Vec<SubscribeTopic>
54}
55
56#[derive(Debug, Clone, PartialEq)]
57pub struct SubscribeTopic {
58	pub topic_path: String,
59	pub qos: QoS
60}
61
62#[derive(Debug, Clone, PartialEq)]
63pub struct Suback {
64    pub pid: PacketIdentifier,
65	// (error, qos)
66	// TODO: replace with enum
67	pub return_codes: Vec<SubscribeReturnCodes>
68}
69
70#[derive(Debug, Clone, Copy, PartialEq, Eq)]
71pub enum SubscribeReturnCodes {
72	Success(QoS),
73	Failure
74}
75
76#[derive(Debug, Clone, PartialEq)]
77pub struct Unsubscribe {
78    pub pid: PacketIdentifier,
79	pub topics: Vec<String>
80}