add mime type groups support

This commit is contained in:
yggverse 2024-12-11 10:19:14 +02:00
parent 1911b0ad95
commit e76bc62d82

View file

@ -14,19 +14,28 @@ use std::path::Path;
/// https://geminiprotocol.net/docs/gemtext-specification.gmi#media-type-parameters /// https://geminiprotocol.net/docs/gemtext-specification.gmi#media-type-parameters
#[derive(Debug)] #[derive(Debug)]
pub enum Mime { pub enum Mime {
// Text // text
TextGemini, TextGemini,
TextPlain, TextPlain,
// Image /// Match unlisted `text/*`
Text,
// image
ImageGif, ImageGif,
ImageJpeg, ImageJpeg,
ImagePng, ImagePng,
ImageSvg, ImageSvg,
ImageWebp, ImageWebp,
// Audio /// Match unlisted `image/*`
Image,
// audio
AudioFlac, AudioFlac,
AudioMpeg, AudioMpeg,
AudioOgg, AudioOgg,
/// Match unlisted `audio/*`
Audio,
// other
/// Match unlisted `application/*`
Application,
} // @TODO } // @TODO
impl Mime { impl Mime {
@ -91,6 +100,10 @@ impl Mime {
return Ok(Some(Self::TextPlain)); return Ok(Some(Self::TextPlain));
} }
if value.contains("text/") {
return Ok(Some(Self::Text));
}
// Image // Image
if value.contains("image/gif") { if value.contains("image/gif") {
return Ok(Some(Self::ImageGif)); return Ok(Some(Self::ImageGif));
@ -112,6 +125,10 @@ impl Mime {
return Ok(Some(Self::ImageWebp)); return Ok(Some(Self::ImageWebp));
} }
if value.contains("image/") {
return Ok(Some(Self::Image));
}
// Audio // Audio
if value.contains("audio/flac") { if value.contains("audio/flac") {
return Ok(Some(Self::AudioFlac)); return Ok(Some(Self::AudioFlac));
@ -125,6 +142,17 @@ impl Mime {
return Ok(Some(Self::AudioOgg)); return Ok(Some(Self::AudioOgg));
} }
if value.contains("audio/") {
return Ok(Some(Self::Audio));
}
// Other
if value.contains("application/") {
return Ok(Some(Self::Application));
}
// application/x-tar
// Some type exist, but not defined yet (on status code is 2*) // Some type exist, but not defined yet (on status code is 2*)
if value.starts_with("2") && value.contains("/") { if value.starts_with("2") && value.contains("/") {
return Err(Error::Undefined); return Err(Error::Undefined);