1#[derive(Debug, Clone, Copy, PartialEq, Eq)]
8#[non_exhaustive]
9pub enum Container {
10 Mp4,
12
13 FMp4,
20
21 WebM,
23
24 Mkv,
26
27 Avi,
29
30 Mov,
32
33 Flac,
35
36 Ogg,
38}
39
40impl Container {
41 #[must_use]
43 pub const fn as_str(self) -> &'static str {
44 match self {
45 Self::Mp4 | Self::FMp4 => "mp4",
46 Self::WebM => "webm",
47 Self::Mkv => "matroska",
48 Self::Avi => "avi",
49 Self::Mov => "mov",
50 Self::Flac => "flac",
51 Self::Ogg => "ogg",
52 }
53 }
54
55 #[must_use]
57 pub const fn default_extension(self) -> &'static str {
58 match self {
59 Self::Mp4 | Self::FMp4 => "mp4",
60 Self::WebM => "webm",
61 Self::Mkv => "mkv",
62 Self::Avi => "avi",
63 Self::Mov => "mov",
64 Self::Flac => "flac",
65 Self::Ogg => "ogg",
66 }
67 }
68
69 #[must_use]
75 pub const fn is_fragmented(self) -> bool {
76 matches!(self, Self::FMp4)
77 }
78}
79
80#[cfg(test)]
81mod tests {
82 use super::*;
83
84 #[test]
85 fn test_container_as_str() {
86 assert_eq!(Container::Mp4.as_str(), "mp4");
87 assert_eq!(Container::WebM.as_str(), "webm");
88 assert_eq!(Container::Mkv.as_str(), "matroska");
89 }
90
91 #[test]
92 fn test_container_extension() {
93 assert_eq!(Container::Mp4.default_extension(), "mp4");
94 assert_eq!(Container::WebM.default_extension(), "webm");
95 assert_eq!(Container::Mkv.default_extension(), "mkv");
96 assert_eq!(Container::Flac.default_extension(), "flac");
97 assert_eq!(Container::Ogg.default_extension(), "ogg");
98 }
99
100 #[test]
101 fn flac_as_str_should_return_flac() {
102 assert_eq!(Container::Flac.as_str(), "flac");
103 }
104
105 #[test]
106 fn ogg_as_str_should_return_ogg() {
107 assert_eq!(Container::Ogg.as_str(), "ogg");
108 }
109
110 #[test]
111 fn fmp4_as_str_should_return_mp4() {
112 assert_eq!(Container::FMp4.as_str(), "mp4");
113 }
114
115 #[test]
116 fn fmp4_extension_should_return_mp4() {
117 assert_eq!(Container::FMp4.default_extension(), "mp4");
118 }
119
120 #[test]
121 fn fmp4_is_fragmented_should_return_true() {
122 assert!(Container::FMp4.is_fragmented());
123 assert!(!Container::Mp4.is_fragmented());
124 assert!(!Container::Mkv.is_fragmented());
125 }
126}