use std::{fmt, str::FromStr};
use crate::{Error, Result};
#[derive(Debug, Eq, PartialEq, Copy, Clone)]
pub enum TimeSignature {
T44,
T34,
T24,
T54,
T64,
T74,
T22,
T32,
T58,
T68,
T78,
T98,
T12,
}
impl fmt::Display for TimeSignature {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
use TimeSignature::*;
let s = match self {
T44 => "T44",
T34 => "T34",
T24 => "T24",
T54 => "T54",
T64 => "T64",
T74 => "T74",
T22 => "T22",
T32 => "T32",
T58 => "T58",
T68 => "T68",
T78 => "T78",
T98 => "T98",
T12 => "T12",
};
write!(f, "{s}")
}
}
impl FromStr for TimeSignature {
type Err = Error;
fn from_str(s: &str) -> Result<Self> {
use TimeSignature::*;
let ts = match s {
"T44" => T44,
"T34" => T34,
"T24" => T24,
"T54" => T54,
"T64" => T64,
"T74" => T74,
"T22" => T22,
"T32" => T32,
"T58" => T58,
"T68" => T68,
"T78" => T78,
"T98" => T98,
"T12" => T12,
_ => return Err(Error::InvalidTimeSignature),
};
Ok(ts)
}
}