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
//This file implements the MQTT control packet format as written in the 
//MQTT 5.0 spec here: https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901019
#![feature(arbitrary_enum_discriminant)]
#[macro_use] extern crate failure;

#[macro_use] extern crate packattack_derive;

mod connect;
mod connack;
mod publish;
mod puback;
mod pubrec;
mod pubrel;
mod pubcomp;
mod subscribe;
mod suback;
mod unsubscribe;
mod unsuback;
mod pingreq;
mod pingresp;
mod disconnect;
mod auth;

pub mod data_representation;
pub mod error;

pub type ERROR = error::MQTTParserError;

use packattack::*;

#[derive(Clone, Debug, PartialEq, FromBitReader)]
#[size_in_bits = 4]
#[repr(u8)]
pub enum Packet 
{
    CONNECT(connect::Connect) = 1,
    CONNACK(connack::Connack) = 2,
    PUBLISH(publish::Publish) = 3,
    PUBACK(puback::Puback) = 4,
    PUBREC(pubrec::Pubrec) = 5,
    PUBREL(pubrel::Pubrel) = 6,
    PUBCOMP(pubcomp::Pubcomp) = 7,
    SUBSCRIBE(()) = 8,
    SUBACK(()) = 9,
    UNSUBSCRIBE(()) = 10,
    UNSUBACK(()) = 11,
    PINGREQ(()) = 12,
    PINGRESP(()) = 13,
    DISCONNECT(()) = 14,
    AUTH(()) = 15
}