ireal_parser/
time_signature.rs1use std::{fmt, str::FromStr};
2
3use crate::{Error, Result};
4
5#[derive(Debug, Eq, PartialEq, Copy, Clone)]
7pub enum TimeSignature {
8 T44,
10 T34,
12 T24,
14 T54,
16 T64,
18 T74,
20 T22,
22 T32,
24 T58,
26 T68,
28 T78,
30 T98,
32 T12,
34}
35
36impl fmt::Display for TimeSignature {
37 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
38 use TimeSignature::*;
39
40 let s = match self {
41 T44 => "T44",
42 T34 => "T34",
43 T24 => "T24",
44 T54 => "T54",
45 T64 => "T64",
46 T74 => "T74",
47 T22 => "T22",
48 T32 => "T32",
49 T58 => "T58",
50 T68 => "T68",
51 T78 => "T78",
52 T98 => "T98",
53 T12 => "T12",
54 };
55
56 write!(f, "{s}")
57 }
58}
59
60impl FromStr for TimeSignature {
61 type Err = Error;
62
63 fn from_str(s: &str) -> Result<Self> {
64 use TimeSignature::*;
65
66 let ts = match s {
67 "T44" => T44,
68 "T34" => T34,
69 "T24" => T24,
70 "T54" => T54,
71 "T64" => T64,
72 "T74" => T74,
73 "T22" => T22,
74 "T32" => T32,
75 "T58" => T58,
76 "T68" => T68,
77 "T78" => T78,
78 "T98" => T98,
79 "T12" => T12,
80 _ => return Err(Error::InvalidTimeSignature),
81 };
82
83 Ok(ts)
84 }
85}