use std::path::Path;
pub fn extension_from_filename(filename: &str) -> Option<String> {
Path::new(filename)
.extension()
.and_then(|ext| ext.to_str())
.map(|ext| format!(".{}", ext))
}
pub fn extension_from_mime(mime: &str) -> &'static str {
if mime.contains("json") {
return ".json";
}
if mime.contains("html") {
return ".html";
}
if mime.contains("xml") {
return ".xml";
}
".txt"
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_extension_from_file_name_json() {
let ext = extension_from_filename("test.json").unwrap();
assert_eq!(".json", ext);
}
#[test]
fn test_extension_from_file_name_xml() {
let ext = extension_from_filename("test.xml").unwrap();
assert_eq!(".xml", ext);
}
#[test]
fn test_extension_from_file_name_txt() {
let ext = extension_from_filename("test.txt").unwrap();
assert_eq!(".txt", ext);
}
#[test]
fn test_extension_from_file_name_none() {
let ext = extension_from_filename("test");
assert!(ext.is_none());
}
#[test]
fn test_extension_from_mime_application_json() {
let ext = extension_from_mime("application/json");
assert_eq!(".json", ext);
}
#[test]
fn test_extension_from_mime_text_json() {
let ext = extension_from_mime("text/json");
assert_eq!(".json", ext);
}
#[test]
fn test_extension_from_mime_text_html() {
let ext = extension_from_mime("text/html");
assert_eq!(".html", ext);
}
#[test]
fn test_extension_from_mime_application_html() {
let ext = extension_from_mime("application/xml+html");
assert_eq!(".html", ext);
}
#[test]
fn test_extension_from_mime_application_xml() {
let ext = extension_from_mime("application/xml");
assert_eq!(".xml", ext);
}
#[test]
fn test_extension_from_mime_text_xml() {
let ext = extension_from_mime("text/xml");
assert_eq!(".xml", ext);
}
#[test]
fn test_extension_from_mime_text_plain() {
let ext = extension_from_mime("text/plain");
assert_eq!(".txt", ext);
}
}