1use crate::MimeFormat;
2use std::fmt::{self, Display, Formatter};
3
4#[derive(Debug, Clone, PartialEq, Eq)]
8pub enum Video {
9 Mp4,
11 M4v,
13 Mkv,
15 Webm,
17 Mov,
19 Avi,
21 Wmv,
23 Mpg,
25 Flv,
27}
28
29impl Display for Video {
30 fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
31 let mime_str = match self {
32 Video::Mp4 => "video/mp4",
33 Video::M4v => "video/x-m4v",
34 Video::Mkv => "video/x-matroska",
35 Video::Webm => "video/webm",
36 Video::Mov => "video/quicktime",
37 Video::Avi => "video/x-msvideo",
38 Video::Wmv => "video/x-ms-wmv",
39 Video::Mpg => "video/mpeg",
40 Video::Flv => "video/x-flv",
41 };
42 write!(f, "{}", mime_str)
43 }
44}
45
46impl MimeFormat for Video {
47 fn from_ext(ext: &str) -> Option<crate::MimeType> {
48 match ext {
49 "mp4" => Some(crate::MimeType::Video(Video::Mp4)),
50 "m4v" => Some(crate::MimeType::Video(Video::M4v)),
51 "mkv" => Some(crate::MimeType::Video(Video::Mkv)),
52 "webm" => Some(crate::MimeType::Video(Video::Webm)),
53 "mov" => Some(crate::MimeType::Video(Video::Mov)),
54 "avi" => Some(crate::MimeType::Video(Video::Avi)),
55 "wmv" => Some(crate::MimeType::Video(Video::Wmv)),
56 "mpg" | "mpeg" => Some(crate::MimeType::Video(Video::Mpg)),
57 "flv" => Some(crate::MimeType::Video(Video::Flv)),
58 _ => None,
59 }
60 }
61
62 fn from_mime(mime: &str) -> Option<crate::MimeType> {
63 match mime {
64 "video/mp4" => Some(crate::MimeType::Video(Video::Mp4)),
65 "video/x-m4v" => Some(crate::MimeType::Video(Video::M4v)),
66 "video/x-matroska" => Some(crate::MimeType::Video(Video::Mkv)),
67 "video/webm" => Some(crate::MimeType::Video(Video::Webm)),
68 "video/quicktime" => Some(crate::MimeType::Video(Video::Mov)),
69 "video/x-msvideo" => Some(crate::MimeType::Video(Video::Avi)),
70 "video/x-ms-wmv" => Some(crate::MimeType::Video(Video::Wmv)),
71 "video/mpeg" => Some(crate::MimeType::Video(Video::Mpg)),
72 "video/x-flv" => Some(crate::MimeType::Video(Video::Flv)),
73 _ => None,
74 }
75 }
76}