#[derive(Debug, PartialEq, Eq)] pub enum ControlCode { Melody, // 0x80 Space, // 0x81 Question, // 0x82 Bang, // 0x83 Newline, // 0x84 Punct, // 0x85 Bebe, // 0x86, Control, // -1 } #[derive(Debug, PartialEq, Eq)] pub enum Letter { A, // 0x5D B, // 0x5E C, // 0x5F D, // 0x60 E, // 0x61 F, // 0x62 G, // 0x63 H, // 0x64 I, // 0x65 J, // 0x66 K, // 0x67 L, // 0x68 M, // 0x69 N, // 0x6A O, // 0x6B P, // 0x6C Q, // 0x6D R, // 0x6E S, // 0x6F T, // 0x70 U, // 0x71 V, // 0x72 W, // 0x73 X, // 0x74 Y, // 0x75 Z, // 0x76 } #[derive(Debug, PartialEq, Eq)] pub enum Digit { D0, // 0x53 D1, // 0x54 D2, // 0x55 D3, // 0x56 D4, // 0x57 D5, // 0x58 D6, // 0x59 D7, // 0x5A D8, // 0x5B D9, // 0x5C } #[derive(Debug)] pub enum VoiceCode { Letter(Letter), ControlCode(ControlCode), Digit(Digit) } impl Letter { fn is_shiin(&self) -> bool { !self.is_boin() } fn is_boin(&self) -> bool { use Letter::*; [A, E, I, O, U, N].contains(&self) } }