use mxlink::mime; pub fn get_file_extension(mime_type: &mime::Mime) -> String { match (mime_type.type_(), mime_type.subtype()) { (mime::AUDIO, mime::BASIC) => "au", (mime::AUDIO, mime::MPEG) => "mp3", (mime::AUDIO, mime::MP4) => "m4a", (mime::AUDIO, mime::OGG) => "ogg", (mime::IMAGE, mime::BMP) => "bmp", (mime::IMAGE, mime::GIF) => "gif", (mime::IMAGE, mime::JPEG) => "jpg", (mime::IMAGE, mime::PNG) => "png", (mime::IMAGE, mime::SVG) => "svg", _ => "bin", } .to_string() } pub fn get_mime_type_from_file_name(file_name: &str) -> mime::Mime { let extension = file_name.rsplit('.').next().unwrap_or(""); match extension.to_lowercase().as_str() { "jpg" | "jpeg" => mime::IMAGE_JPEG, "png" => mime::IMAGE_PNG, "gif" => mime::IMAGE_GIF, "webp" => "image/webp".parse().unwrap(), "svg" => mime::IMAGE_SVG, "tiff" | "tif" => "image/tiff".parse().unwrap(), "bmp" => "image/bmp".parse().unwrap(), "heic" | "heif" => "image/heic".parse().unwrap(), "avif" => "image/avif".parse().unwrap(), "pdf" => "application/pdf".parse().unwrap(), "txt" | "log" => mime::TEXT_PLAIN, "csv" => mime::TEXT_CSV, "json" => mime::APPLICATION_JSON, "xml" => "application/xml".parse().unwrap(), "html" | "htm" => mime::TEXT_HTML, "md" | "markdown" => "text/markdown".parse().unwrap(), "yaml" | "yml" => "application/yaml".parse().unwrap(), "toml" => "application/toml".parse().unwrap(), "rs" | "py" | "js" | "ts" | "go" | "c" | "cpp" | "h" | "java" | "rb" | "sh" | "css" => { mime::TEXT_PLAIN } _ => mime::APPLICATION_OCTET_STREAM, } }