1#[derive(Debug, Clone, PartialEq)]
3pub enum FileFormat {
4 GuitarPro3,
6 GuitarPro4,
8 GuitarPro5,
10 GuitarProX,
12 GuitarPro,
14 MuseScore,
16}
17
18impl FileFormat {
19 pub fn extension(&self) -> &'static str {
21 match self {
22 FileFormat::GuitarPro3 => "gp3",
23 FileFormat::GuitarPro4 => "gp4",
24 FileFormat::GuitarPro5 => "gp5",
25 FileFormat::GuitarProX => "gpx",
26 FileFormat::GuitarPro => "gp",
27 FileFormat::MuseScore => "mscz",
28 }
29 }
30
31 pub fn name(&self) -> &'static str {
33 match self {
34 FileFormat::GuitarPro3 => "Guitar Pro 3",
35 FileFormat::GuitarPro4 => "Guitar Pro 4",
36 FileFormat::GuitarPro5 => "Guitar Pro 5",
37 FileFormat::GuitarProX => "Guitar Pro X",
38 FileFormat::GuitarPro => "Guitar Pro",
39 FileFormat::MuseScore => "MuseScore",
40 }
41 }
42
43 pub fn supports_compression(&self) -> bool {
45 matches!(self, FileFormat::GuitarProX | FileFormat::MuseScore)
46 }
47
48 pub fn is_xml_based(&self) -> bool {
50 matches!(self, FileFormat::MuseScore)
51 }
52
53 pub fn supported_versions(&self) -> Vec<&'static str> {
55 match self {
56 FileFormat::GuitarPro3 => vec!["3.00"],
57 FileFormat::GuitarPro4 => vec!["4.00", "4.06"],
58 FileFormat::GuitarPro5 => vec!["5.00", "5.10"],
59 FileFormat::GuitarProX => vec!["6.00", "6.08"],
60 FileFormat::GuitarPro => vec!["7.00", "7.50", "8.00"],
61 FileFormat::MuseScore => vec!["2.0", "3.0", "4.0"],
62 }
63 }
64}