usbd_midi/message/
channel.rs1#[derive(Debug, Copy, Clone, Eq, PartialEq)]
8#[repr(u8)]
9pub enum Channel {
10 Channel1 = 0x0,
12 Channel2 = 0x1,
14 Channel3 = 0x2,
16 Channel4 = 0x3,
18 Channel5 = 0x4,
20 Channel6 = 0x5,
22 Channel7 = 0x6,
24 Channel8 = 0x7,
26 Channel9 = 0x8,
28 Channel10 = 0x9,
30 Channel11 = 0xA,
32 Channel12 = 0xB,
34 Channel13 = 0xC,
36 Channel14 = 0xD,
38 Channel15 = 0xE,
40 Channel16 = 0xF,
42}
43
44pub struct InvalidChannel(pub u8);
46
47impl TryFrom<u8> for Channel {
48 type Error = InvalidChannel;
49 fn try_from(value: u8) -> Result<Self, Self::Error> {
50 match value {
51 x if x == Channel::Channel1 as u8 => Ok(Channel::Channel1),
52 x if x == Channel::Channel2 as u8 => Ok(Channel::Channel2),
53 x if x == Channel::Channel3 as u8 => Ok(Channel::Channel3),
54 x if x == Channel::Channel4 as u8 => Ok(Channel::Channel4),
55 x if x == Channel::Channel5 as u8 => Ok(Channel::Channel5),
56 x if x == Channel::Channel6 as u8 => Ok(Channel::Channel6),
57 x if x == Channel::Channel7 as u8 => Ok(Channel::Channel7),
58 x if x == Channel::Channel8 as u8 => Ok(Channel::Channel8),
59 x if x == Channel::Channel9 as u8 => Ok(Channel::Channel9),
60 x if x == Channel::Channel10 as u8 => Ok(Channel::Channel10),
61 x if x == Channel::Channel11 as u8 => Ok(Channel::Channel11),
62 x if x == Channel::Channel12 as u8 => Ok(Channel::Channel12),
63 x if x == Channel::Channel13 as u8 => Ok(Channel::Channel13),
64 x if x == Channel::Channel14 as u8 => Ok(Channel::Channel14),
65 x if x == Channel::Channel15 as u8 => Ok(Channel::Channel15),
66 x if x == Channel::Channel16 as u8 => Ok(Channel::Channel16),
67 _ => Err(InvalidChannel(value)),
68 }
69 }
70}
71
72impl From<Channel> for u8 {
73 fn from(src: Channel) -> u8 {
74 src as u8
75 }
76}
77
78#[cfg(test)]
79mod tests {
80
81 use super::*;
82 macro_rules! channel_test {
83 ($($id:ident:$value:expr,)*) => {
84 $(
85 #[test]
86 fn $id() {
87 let (input,expected) = $value;
88 assert_eq!(input as u8, expected);
89 }
90 )*
91 }
92 }
93
94 channel_test! {
95 channel_1: (Channel::Channel1,0),
96 channel_2: (Channel::Channel2,1),
97 channel_3: (Channel::Channel3,2),
98 channel_4: (Channel::Channel4,3),
99 channel_5: (Channel::Channel5,4),
100 channel_6: (Channel::Channel6,5),
101 channel_7: (Channel::Channel7,6),
102 channel_8: (Channel::Channel8,7),
103 channel_9: (Channel::Channel9,8),
104 channel_10: (Channel::Channel10,9),
105 channel_11: (Channel::Channel11,10),
106 channel_12: (Channel::Channel12,11),
107 channel_13: (Channel::Channel13,12),
108 channel_14: (Channel::Channel14,13),
109 channel_15: (Channel::Channel15,14),
110 channel_16: (Channel::Channel16,15),
111 }
112}