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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#[derive(Debug, PartialEq, Clone)]
pub enum MessageType {
Connect,
Close,
Data,
Heartbeat,
Establish,
Key,
Verify,
Acknowledge,
}
impl MessageType {
pub fn deserialize(data: u8) -> Option<MessageType> {
match data {
1 => Some(MessageType::Connect),
2 => Some(MessageType::Close),
3 => Some(MessageType::Data),
4 => Some(MessageType::Heartbeat),
5 => Some(MessageType::Establish),
6 => Some(MessageType::Key),
7 => Some(MessageType::Verify),
8 => Some(MessageType::Acknowledge),
_ => None,
}
}
pub fn serialize(&self) -> u8 {
match *self {
MessageType::Connect => 1,
MessageType::Close => 2,
MessageType::Data => 3,
MessageType::Heartbeat => 4,
MessageType::Establish => 5,
MessageType::Key => 6,
MessageType::Verify => 7,
MessageType::Acknowledge => 8,
}
}
}
#[test]
fn message_type_deserialize_connect() {
assert_eq!(Some(MessageType::Connect), MessageType::deserialize(1));
}
#[test]
fn message_type_deserialize_close() {
assert_eq!(Some(MessageType::Close), MessageType::deserialize(2));
}
#[test]
fn message_type_deserialize_data() {
assert_eq!(Some(MessageType::Data), MessageType::deserialize(3));
}
#[test]
fn message_type_deserialize_heartbeat() {
assert_eq!(Some(MessageType::Heartbeat), MessageType::deserialize(4));
}
#[test]
fn message_type_deserialize_establish() {
assert_eq!(Some(MessageType::Establish), MessageType::deserialize(5));
}
#[test]
fn message_type_deserialize_key() {
assert_eq!(Some(MessageType::Key), MessageType::deserialize(6));
}
#[test]
fn message_type_deserialize_verify() {
assert_eq!(Some(MessageType::Verify), MessageType::deserialize(7));
}
#[test]
fn message_type_deserialize_acknowledge() {
assert_eq!(Some(MessageType::Acknowledge), MessageType::deserialize(8));
}
#[test]
fn message_type_deserialize_invalid() {
assert_eq!(None, MessageType::deserialize(123));
}
#[test]
fn message_type_serialize_connect() {
assert_eq!(1, MessageType::Connect.serialize());
}
#[test]
fn message_type_serialize_close() {
assert_eq!(2, MessageType::Close.serialize());
}
#[test]
fn message_type_serialize_data() {
assert_eq!(3, MessageType::Data.serialize());
}
#[test]
fn message_type_serialize_heartbeat() {
assert_eq!(4, MessageType::Heartbeat.serialize());
}
#[test]
fn message_type_serialize_establish() {
assert_eq!(5, MessageType::Establish.serialize());
}
#[test]
fn message_type_serialize_key() {
assert_eq!(6, MessageType::Key.serialize());
}
#[test]
fn message_type_serialize_verify() {
assert_eq!(7, MessageType::Verify.serialize());
}
#[test]
fn message_type_serialize_acknowledge() {
assert_eq!(8, MessageType::Acknowledge.serialize());
}