#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[non_exhaustive]
pub enum OutputContainer {
Mp4,
FMp4,
WebM,
Mkv,
Avi,
Mov,
Flac,
Ogg,
}
impl OutputContainer {
#[must_use]
pub const fn as_str(self) -> &'static str {
match self {
Self::Mp4 | Self::FMp4 => "mp4",
Self::WebM => "webm",
Self::Mkv => "matroska",
Self::Avi => "avi",
Self::Mov => "mov",
Self::Flac => "flac",
Self::Ogg => "ogg",
}
}
#[must_use]
pub const fn default_extension(self) -> &'static str {
match self {
Self::Mp4 | Self::FMp4 => "mp4",
Self::WebM => "webm",
Self::Mkv => "mkv",
Self::Avi => "avi",
Self::Mov => "mov",
Self::Flac => "flac",
Self::Ogg => "ogg",
}
}
#[must_use]
pub const fn is_fragmented(self) -> bool {
matches!(self, Self::FMp4)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_container_as_str() {
assert_eq!(OutputContainer::Mp4.as_str(), "mp4");
assert_eq!(OutputContainer::WebM.as_str(), "webm");
assert_eq!(OutputContainer::Mkv.as_str(), "matroska");
}
#[test]
fn test_container_extension() {
assert_eq!(OutputContainer::Mp4.default_extension(), "mp4");
assert_eq!(OutputContainer::WebM.default_extension(), "webm");
assert_eq!(OutputContainer::Mkv.default_extension(), "mkv");
assert_eq!(OutputContainer::Flac.default_extension(), "flac");
assert_eq!(OutputContainer::Ogg.default_extension(), "ogg");
}
#[test]
fn flac_as_str_should_return_flac() {
assert_eq!(OutputContainer::Flac.as_str(), "flac");
}
#[test]
fn ogg_as_str_should_return_ogg() {
assert_eq!(OutputContainer::Ogg.as_str(), "ogg");
}
#[test]
fn fmp4_as_str_should_return_mp4() {
assert_eq!(OutputContainer::FMp4.as_str(), "mp4");
}
#[test]
fn fmp4_extension_should_return_mp4() {
assert_eq!(OutputContainer::FMp4.default_extension(), "mp4");
}
#[test]
fn fmp4_is_fragmented_should_return_true() {
assert!(OutputContainer::FMp4.is_fragmented());
assert!(!OutputContainer::Mp4.is_fragmented());
assert!(!OutputContainer::Mkv.is_fragmented());
}
}