ot_tools_io/projects/settings/
trig_mode_midi_tracks.rs

1/*
2SPDX-License-Identifier: GPL-3.0-or-later
3Copyright © 2024 Mike Robeson [dijksterhuis]
4*/
5
6//! Current Trig mode setting for MIDI tracks.
7use crate::projects::parse_hashmap_string_value;
8// use crate::OtToolsIoErrors;
9use crate::projects::ProjectParseError;
10use serde::{Deserialize, Serialize};
11use std::collections::HashMap;
12
13/// Current Trig mode setting for MIDI tracks.
14
15#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
16pub struct MidiTrackTrigModes {
17    // helpfully these are all just called TRIG_MODE_MIDI
18    // but there's 8 of them so they must refer to the channels somehow
19    // all default to 0.
20    // refers to whether MIDI track is on TRACK or CHRMOATIC trig mode.
21    // should be u8 as *possible* for more trig modes to be added (although unlikely)
22    /// Trig mode for MIDI Track 1
23    pub trig_mode_midi_track_1: u8,
24
25    /// Trig mode for MIDI Track 2
26    pub trig_mode_midi_track_2: u8,
27
28    /// Trig mode for MIDI Track 3
29    pub trig_mode_midi_track_3: u8,
30
31    /// Trig mode for MIDI Track 4
32    pub trig_mode_midi_track_4: u8,
33
34    /// Trig mode for MIDI Track 5
35    pub trig_mode_midi_track_5: u8,
36
37    /// Trig mode for MIDI Track 6
38    pub trig_mode_midi_track_6: u8,
39
40    /// Trig mode for MIDI Track 7
41    pub trig_mode_midi_track_7: u8,
42
43    /// Trig mode for MIDI Track 8
44    pub trig_mode_midi_track_8: u8,
45}
46
47impl TryFrom<&HashMap<String, String>> for MidiTrackTrigModes {
48    type Error = ProjectParseError;
49    fn try_from(value: &HashMap<String, String>) -> Result<Self, Self::Error> {
50        let trig_mode_midi_track_1 =
51            parse_hashmap_string_value::<u8>(value, "trig_mode_midi_track_1", None)?;
52        let trig_mode_midi_track_2 =
53            parse_hashmap_string_value::<u8>(value, "trig_mode_midi_track_2", None)?;
54        let trig_mode_midi_track_3 =
55            parse_hashmap_string_value::<u8>(value, "trig_mode_midi_track_3", None)?;
56        let trig_mode_midi_track_4 =
57            parse_hashmap_string_value::<u8>(value, "trig_mode_midi_track_4", None)?;
58        let trig_mode_midi_track_5 =
59            parse_hashmap_string_value::<u8>(value, "trig_mode_midi_track_5", None)?;
60        let trig_mode_midi_track_6 =
61            parse_hashmap_string_value::<u8>(value, "trig_mode_midi_track_6", None)?;
62        let trig_mode_midi_track_7 =
63            parse_hashmap_string_value::<u8>(value, "trig_mode_midi_track_7", None)?;
64        let trig_mode_midi_track_8 =
65            parse_hashmap_string_value::<u8>(value, "trig_mode_midi_track_8", None)?;
66
67        Ok(Self {
68            trig_mode_midi_track_1,
69            trig_mode_midi_track_2,
70            trig_mode_midi_track_3,
71            trig_mode_midi_track_4,
72            trig_mode_midi_track_5,
73            trig_mode_midi_track_6,
74            trig_mode_midi_track_7,
75            trig_mode_midi_track_8,
76        })
77    }
78}