use crate::projects::{parse_hashmap_string_value, parse_hashmap_string_value_bool};
use ot_tools_io_derive::{AsMutDerive, AsRefDerive};
use crate::projects::ProjectParseError;
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(
Copy,
Clone,
Debug,
Eq,
Hash,
Ord,
PartialEq,
PartialOrd,
Serialize,
Deserialize,
AsMutDerive,
AsRefDerive,
)]
pub struct TempoMenu {
pub tempo: u32,
pub pattern_tempo_enabled: bool,
}
impl Default for TempoMenu {
fn default() -> Self {
Self {
tempo: 120,
pattern_tempo_enabled: false,
}
}
}
impl TryFrom<&HashMap<String, String>> for TempoMenu {
type Error = ProjectParseError;
fn try_from(value: &HashMap<String, String>) -> Result<Self, Self::Error> {
let tempo = parse_hashmap_string_value::<u32>(value, "tempox24", None)? / 24;
let pattern_tempo_enabled =
parse_hashmap_string_value_bool(value, "pattern_tempo_enabled", None)?;
Ok(Self {
tempo,
pattern_tempo_enabled,
})
}
}