1use crate::MimeFormat;
2use std::fmt::{self, Display, Formatter};
3
4#[derive(Debug, Clone, PartialEq, Eq)]
8pub enum Audio {
9 Midi,
11 Mpeg,
13 M4a,
15 Ogg,
17 Flac,
19 Wav,
21 Amr,
23 Aac,
25 Aiff,
27 Dsf,
29 Ape,
31}
32
33impl Display for Audio {
34 fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
35 let mime_str = match self {
36 Audio::Midi => "audio/midi",
37 Audio::Mpeg => "audio/mpeg",
38 Audio::M4a => "audio/m4a",
39 Audio::Ogg => "audio/ogg",
40 Audio::Flac => "audio/x-flac",
41 Audio::Wav => "audio/x-wav",
42 Audio::Amr => "audio/amr",
43 Audio::Aac => "audio/aac",
44 Audio::Aiff => "audio/x-aiff",
45 Audio::Dsf => "audio/x-dsf",
46 Audio::Ape => "audio/x-ape",
47 };
48 write!(f, "{}", mime_str)
49 }
50}
51
52impl MimeFormat for Audio {
53 fn from_ext(ext: &str) -> Option<crate::MimeType> {
54 match ext {
55 "midi" | "mid" => Some(crate::MimeType::Audio(Audio::Midi)),
56 "mp3" => Some(crate::MimeType::Audio(Audio::Mpeg)),
57 "m4a" => Some(crate::MimeType::Audio(Audio::M4a)),
58 "ogg" => Some(crate::MimeType::Audio(Audio::Ogg)),
59 "flac" => Some(crate::MimeType::Audio(Audio::Flac)),
60 "wav" => Some(crate::MimeType::Audio(Audio::Wav)),
61 "amr" => Some(crate::MimeType::Audio(Audio::Amr)),
62 "aac" => Some(crate::MimeType::Audio(Audio::Aac)),
63 "aiff" | "aif" => Some(crate::MimeType::Audio(Audio::Aiff)),
64 "dsf" => Some(crate::MimeType::Audio(Audio::Dsf)),
65 "ape" => Some(crate::MimeType::Audio(Audio::Ape)),
66 _ => None,
67 }
68 }
69
70 fn from_mime(mime: &str) -> Option<crate::MimeType> {
71 match mime {
72 "audio/midi" => Some(crate::MimeType::Audio(Audio::Midi)),
73 "audio/mpeg" => Some(crate::MimeType::Audio(Audio::Mpeg)),
74 "audio/m4a" => Some(crate::MimeType::Audio(Audio::M4a)),
75 "audio/ogg" => Some(crate::MimeType::Audio(Audio::Ogg)),
76 "audio/x-flac" => Some(crate::MimeType::Audio(Audio::Flac)),
77 "audio/x-wav" => Some(crate::MimeType::Audio(Audio::Wav)),
78 "audio/amr" => Some(crate::MimeType::Audio(Audio::Amr)),
79 "audio/aac" => Some(crate::MimeType::Audio(Audio::Aac)),
80 "audio/x-aiff" => Some(crate::MimeType::Audio(Audio::Aiff)),
81 "audio/x-dsf" => Some(crate::MimeType::Audio(Audio::Dsf)),
82 "audio/x-ape" => Some(crate::MimeType::Audio(Audio::Ape)),
83 _ => None,
84 }
85 }
86}