From 64cc68e9bd5e225de3467b3e3f4c260b92413b23 Mon Sep 17 00:00:00 2001 From: yggverse Date: Mon, 28 Oct 2024 20:36:37 +0200 Subject: [PATCH] add audio formats --- src/client/response/header/mime.rs | 31 ++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/src/client/response/header/mime.rs b/src/client/response/header/mime.rs index c3cac44..9f81a91 100644 --- a/src/client/response/header/mime.rs +++ b/src/client/response/header/mime.rs @@ -7,12 +7,18 @@ use std::path::Path; /// https://geminiprotocol.net/docs/gemtext-specification.gmi#media-type-parameters #[derive(Debug)] pub enum Mime { + // Text TextGemini, TextPlain, - ImagePng, + // Image ImageGif, ImageJpeg, + ImagePng, ImageWebp, + // Audio + AudioFlac, + AudioMpeg, + AudioOgg, } // @TODO impl Mime { @@ -28,17 +34,24 @@ impl Mime { pub fn from_path(path: &Path) -> Result { match path.extension().and_then(|extension| extension.to_str()) { + // Text Some("gmi" | "gemini") => Ok(Self::TextGemini), + // Image Some("txt") => Ok(Self::TextPlain), Some("png") => Ok(Self::ImagePng), Some("gif") => Ok(Self::ImageGif), Some("jpeg" | "jpg") => Ok(Self::ImageJpeg), Some("webp") => Ok(Self::ImageWebp), + // Audio + Some("flac") => Ok(Self::AudioFlac), + Some("mp3") => Ok(Self::AudioMpeg), + Some("ogg" | "opus" | "oga" | "spx") => Ok(Self::AudioOgg), _ => Err(Error::Undefined), - } + } // @TODO extension to lowercase } pub fn from_string(value: &str) -> Result { + // Text if value.contains("text/gemini") { return Ok(Self::TextGemini); } @@ -47,6 +60,7 @@ impl Mime { return Ok(Self::TextPlain); } + // Image if value.contains("image/gif") { return Ok(Self::ImageGif); } @@ -63,6 +77,19 @@ impl Mime { return Ok(Self::ImagePng); } + // Audio + if value.contains("audio/flac") { + return Ok(Self::AudioFlac); + } + + if value.contains("audio/mpeg") { + return Ok(Self::AudioMpeg); + } + + if value.contains("audio/ogg") { + return Ok(Self::AudioOgg); + } + Err(Error::Undefined) }