#[derive(Debug, Default, Copy, Clone)]
pub enum NoteCommand {
#[default]
None, SetTempo(u8), JumpToOrder(u8), BreakToRow(u8), VolumeSlideDown(u8), PitchSlideDown(u8), PitchSlideUp(u8), SlideToNote(u8), Vibrato(u8), Tremor(u8), Arpeggio(u8), VibratoAndVolSlideDown(u8), SlideToNoteAndVolSlideDown(u8), SetChannelVol(u8), ChannelVolumeSlideDown(u8), SetSampleOffset(u8), PanningSlide(u8), RetriggerNote(u8), Tremolo(u8), AlmostEverything(u8), TempoChange(u8), FineVibrato(u8), SetGlobalVolume(u8), GlobalVolumeSlide(u8), SetPanning(u8), Panbrello(u8), MIDIMacros(u8), }
pub struct UnknownCommand;
impl TryFrom<(u8, u8)> for NoteCommand {
type Error = UnknownCommand;
fn try_from((command_type, command_value): (u8, u8)) -> Result<Self, Self::Error> {
match command_type {
0 => Ok(Self::None),
1 => Ok(Self::SetTempo(command_value)),
2 => Ok(Self::JumpToOrder(command_value)),
3 => Ok(Self::BreakToRow(command_value)),
4 => Ok(Self::VolumeSlideDown(command_value)),
5 => Ok(Self::PitchSlideDown(command_value)),
6 => Ok(Self::PitchSlideUp(command_value)),
7 => Ok(Self::SlideToNote(command_value)),
8 => Ok(Self::Vibrato(command_value)),
9 => Ok(Self::Tremor(command_value)),
10 => Ok(Self::Arpeggio(command_value)),
11 => Ok(Self::VibratoAndVolSlideDown(command_value)),
12 => Ok(Self::SlideToNoteAndVolSlideDown(command_value)),
13 => Ok(Self::SetChannelVol(command_value)),
14 => Ok(Self::ChannelVolumeSlideDown(command_value)),
15 => Ok(Self::SetSampleOffset(command_value)),
16 => Ok(Self::PanningSlide(command_value)),
17 => Ok(Self::RetriggerNote(command_value)),
18 => Ok(Self::Tremolo(command_value)),
19 => Ok(Self::AlmostEverything(command_value)),
20 => Ok(Self::TempoChange(command_value)),
21 => Ok(Self::FineVibrato(command_value)),
22 => Ok(Self::SetGlobalVolume(command_value)),
23 => Ok(Self::GlobalVolumeSlide(command_value)),
24 => Ok(Self::SetPanning(command_value)),
25 => Ok(Self::Panbrello(command_value)),
26 => Ok(Self::MIDIMacros(command_value)),
_ => Err(UnknownCommand),
}
}
}