ddp_connection/protocol/
id.rs1use serde::{Deserialize, Serialize};
2#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Hash, Clone, Copy)]
3pub enum ID {
4 Reserved,
5 Default,
6 Custom(u8),
7 Control,
8 Config,
9 Status,
10 DMX,
11 Broadcast,
12}
13
14impl From<u8> for ID {
15 fn from(value: u8) -> Self {
16 match value {
17 0 => ID::Reserved,
18 1 => ID::Default,
19 2..=246 => ID::Custom(value),
20 249 => ID::Control,
21 250 => ID::Config,
22 251 => ID::Status,
23 254 => ID::DMX,
24 255 => ID::Broadcast,
25 _ => ID::Reserved,
26 }
27 }
28}
29
30impl Into<u8> for ID {
31 fn into(self) -> u8 {
32 match self {
33 ID::Reserved => 0,
34 ID::Default => 1,
35 ID::Custom(value) if value >= 2 && value <= 246 => value,
36 ID::Control => 249,
37 ID::Config => 250,
38 ID::Status => 251,
39 ID::DMX => 254,
40 ID::Broadcast => 255,
41 ID::Custom(_) => 1,
42 }
43 }
44}
45
46impl Default for ID {
47 fn default() -> Self {
48 ID::Default
49 }
50}
51
52#[cfg(test)]
53mod tests {
54 use super::*;
55
56 #[test]
57 fn test_id_parse() {
58 let id = ID::from(212);
60 assert_eq!(id, ID::Custom(212));
61
62 let id = ID::from(1);
64 assert_eq!(id, ID::Default);
65
66 let id = ID::from(251);
68 assert_eq!(id, ID::Status);
69
70 let id = ID::from(0);
72 assert_eq!(id, ID::Reserved);
73 }
74}