mime_type/
video.rs

1use crate::MimeFormat;
2use std::fmt::{self, Display, Formatter};
3
4/// Video file formats.
5///
6/// Supports common video container and codec formats.
7#[derive(Debug, Clone, PartialEq, Eq)]
8pub enum Video {
9    /// MPEG-4 Part 14 video format
10    Mp4,
11    /// iTunes video format
12    M4v,
13    /// Matroska video format
14    Mkv,
15    /// WebM video format
16    Webm,
17    /// QuickTime movie format
18    Mov,
19    /// Audio Video Interleave format
20    Avi,
21    /// Windows Media Video format
22    Wmv,
23    /// MPEG video format
24    Mpg,
25    /// Flash Video format
26    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}