use crate::projects::parse_hashmap_string_value;
use crate::projects::ProjectParseError;
use ot_tools_io_derive::{AsMutDerive, AsRefDerive};
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(
Copy,
Clone,
Debug,
Eq,
Hash,
Ord,
PartialEq,
PartialOrd,
Serialize,
Deserialize,
AsMutDerive,
AsRefDerive,
)]
pub struct MixerMenu {
pub gain_ab: u8,
pub gain_cd: u8,
pub dir_ab: u8,
pub dir_cd: u8,
pub phones_mix: u8,
pub main_to_cue: u8,
pub main_level: u8,
pub cue_level: u8,
}
impl Default for MixerMenu {
fn default() -> Self {
Self {
gain_ab: 64,
gain_cd: 64,
dir_ab: 0,
dir_cd: 0,
phones_mix: 64,
main_to_cue: 0,
main_level: 64,
cue_level: 64,
}
}
}
impl TryFrom<&HashMap<String, String>> for MixerMenu {
type Error = ProjectParseError;
fn try_from(value: &HashMap<String, String>) -> Result<Self, Self::Error> {
let gain_ab = parse_hashmap_string_value::<u8>(value, "gain_ab", None)?;
let gain_cd = parse_hashmap_string_value::<u8>(value, "gain_cd", None)?;
let dir_ab = parse_hashmap_string_value::<u8>(value, "dir_ab", None)?;
let dir_cd = parse_hashmap_string_value::<u8>(value, "dir_cd", None)?;
let phones_mix = parse_hashmap_string_value::<u8>(value, "phones_mix", None)?;
let main_to_cue = parse_hashmap_string_value::<u8>(value, "main_to_cue", None)?;
let main_level = parse_hashmap_string_value::<u8>(value, "main_level", None)?;
let cue_level = parse_hashmap_string_value::<u8>(value, "cue_level", None)?;
Ok(Self {
gain_ab,
gain_cd,
dir_ab,
dir_cd,
phones_mix,
main_to_cue,
main_level,
cue_level,
})
}
}