From 5a92d8d28f4ded4f48f20dd4a81f76339d8ee5ac Mon Sep 17 00:00:00 2001 From: panicbit Date: Wed, 18 Nov 2020 22:58:23 +0100 Subject: [PATCH] use mime_guess for guessing mime --- Cargo.toml | 1 + src/util.rs | 19 ++++++++----------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index abd66e1..dd12927 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,6 +21,7 @@ itertools = "0.9.0" log = "0.4.11" webpki = "0.21.0" lazy_static = "1.4.0" +mime_guess = "2.0.3" [dev-dependencies] env_logger = "0.8.1" diff --git a/src/util.rs b/src/util.rs index 9db296f..1ba11af 100644 --- a/src/util.rs +++ b/src/util.rs @@ -5,7 +5,6 @@ use tokio::{ fs::{self, File}, io, }; -use crate::GEMINI_MIME_STR; use crate::types::{Response, Document, document::HeadingLevel::*}; use itertools::Itertools; @@ -89,18 +88,16 @@ async fn serve_dir_listing, B: AsRef>(path: P, virtual_path pub fn guess_mime_from_path>(path: P) -> Mime { let path = path.as_ref(); let extension = path.extension().and_then(|s| s.to_str()); - let mime = match extension { - Some(extension) => match extension { - "gemini" | "gmi" => GEMINI_MIME_STR, - "txt" => "text/plain", - "jpeg" | "jpg" | "jpe" => "image/jpeg", - "png" => "image/png", - _ => "application/octet-stream", - }, - None => "application/octet-stream", + let extension = match extension { + Some(extension) => extension, + None => return mime::APPLICATION_OCTET_STREAM, }; - mime.parse::().unwrap_or(mime::APPLICATION_OCTET_STREAM) + if let "gemini" | "gmi" = extension { + return crate::GEMINI_MIME.clone(); + } + + mime_guess::from_ext(extension).first_or_octet_stream() } /// A convenience trait alias for `AsRef + Into`,