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 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 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}