1mod application;
20mod archive;
21mod audio;
22mod book;
23mod document;
24mod font;
25mod image;
26mod mime_format;
27mod video;
28
29use std::fmt::{self, Display, Formatter};
30
31pub use application::Application;
32pub use archive::Archive;
33pub use audio::Audio;
34pub use book::Book;
35pub use document::Document;
36pub use font::Font;
37pub use image::Image;
38pub use mime_format::MimeFormat;
39pub use video::Video;
40
41#[derive(Debug, Clone, PartialEq, Eq)]
46pub enum MimeType {
47 Image(Image),
49 Video(Video),
51 Audio(Audio),
53 Archive(Archive),
55 Book(Book),
57 Document(Document),
59 Font(Font),
61 Application(Application),
63}
64
65impl Display for MimeType {
66 fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
67 match self {
68 MimeType::Image(img) => write!(f, "{}", img),
69 MimeType::Video(vid) => write!(f, "{}", vid),
70 MimeType::Audio(aud) => write!(f, "{}", aud),
71 MimeType::Archive(arch) => write!(f, "{}", arch),
72 MimeType::Book(book) => write!(f, "{}", book),
73 MimeType::Document(doc) => write!(f, "{}", doc),
74 MimeType::Font(font) => write!(f, "{}", font),
75 MimeType::Application(app) => write!(f, "{}", app),
76 }
77 }
78}
79
80impl MimeFormat for MimeType {
81 fn from_ext(ext: &str) -> Option<MimeType> {
82 Image::from_ext(ext)
83 .or_else(|| Video::from_ext(ext))
84 .or_else(|| Audio::from_ext(ext))
85 .or_else(|| Archive::from_ext(ext))
86 .or_else(|| Book::from_ext(ext))
87 .or_else(|| Document::from_ext(ext))
88 .or_else(|| Font::from_ext(ext))
89 .or_else(|| Application::from_ext(ext))
90 }
91
92 fn from_mime(mime: &str) -> Option<MimeType> {
93 Image::from_mime(mime)
94 .or_else(|| Video::from_mime(mime))
95 .or_else(|| Audio::from_mime(mime))
96 .or_else(|| Archive::from_mime(mime))
97 .or_else(|| Book::from_mime(mime))
98 .or_else(|| Document::from_mime(mime))
99 .or_else(|| Font::from_mime(mime))
100 .or_else(|| Application::from_mime(mime))
101 }
102}