Skip to content

Commit 2858179

Browse files
authored
Merge pull request #384 from sorcix/mimetypes
Add font and additional image mime types
2 parents 49dd603 + 9ffd9eb commit 2858179

File tree

2 files changed

+60
-5
lines changed

2 files changed

+60
-5
lines changed

src/mime/constants.rs

Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,17 +57,50 @@ utf8_mime_const!(CSS, "CSS", "text", "css");
5757
utf8_mime_const!(HTML, "HTML", "text", "html");
5858
utf8_mime_const!(PLAIN, "Plain text", "text", "plain");
5959
utf8_mime_const!(XML, "XML", "application", "xml");
60+
utf8_mime_const!(RSS, "RSS Feed", "application", "rss+xml");
61+
utf8_mime_const!(ATOM, "Atom Feed", "application", "atom+xml");
6062
mime_const!(ANY, "matching anything", "*", "*");
6163
mime_const!(JSON, "JSON", "application", "json");
62-
mime_const!(SVG, "SVG", "image", "svg+xml");
63-
mime_const!(PNG, "PNG images", "image", "png");
64-
mime_const!(JPEG, "JPEG images", "image", "jpeg");
6564
mime_const!(SSE, "Server Sent Events", "text", "event-stream");
6665
mime_const!(BYTE_STREAM, "byte streams", "application", "octet-stream");
6766
mime_const!(FORM, "forms", "application", "x-www-form-urlencoded");
6867
mime_const!(MULTIPART_FORM, "multipart forms", "multipart", "form-data");
6968
mime_const!(WASM, "webassembly", "application", "wasm");
69+
70+
// Images
71+
// https://www.iana.org/assignments/media-types/media-types.xhtml#image
72+
mime_const!(BMP, "BMP images", "image", "bmp");
73+
mime_const!(JPEG, "JPEG images", "image", "jpeg");
74+
mime_const!(PNG, "PNG images", "image", "png");
75+
mime_const!(SVG, "SVG", "image", "svg+xml");
76+
mime_const!(WEBP, "WebP images", "image", "webp");
77+
78+
// Audio
79+
// https://www.iana.org/assignments/media-types/media-types.xhtml#audio
80+
mime_const!(MIDI, "MIDI audio", "audio", "midi");
81+
mime_const!(MP3, "MPEG audio layer 3", "audio", "mpeg");
82+
mime_const!(OGG, "Ogg vorbis audio", "audio", "ogg");
83+
mime_const!(OPUS, "Opus audio", "audio", "opus");
84+
mime_const!(M4A, "MPEG audio layer 4", "audio", "mp4");
85+
86+
// Video
87+
// https://www.iana.org/assignments/media-types/media-types.xhtml#video
88+
mime_const!(MP4, "MPEG video layer 4", "video", "mp4");
89+
mime_const!(MPEG, "MPEG video", "video", "mpeg");
90+
mime_const!(WEBM, "WebM video", "video", "webm");
91+
mime_const!(AVI, "Microsoft AVI video", "video", "x-msvideo");
7092
// There are multiple `.ico` mime types known, but `image/x-icon`
7193
// is what most browser use. See:
7294
// https://en.wikipedia.org/wiki/ICO_%28file_format%29#MIME_type
7395
mime_const!(ICO, "ICO icons", "image", "x-icon");
96+
97+
// Fonts
98+
// https://www.iana.org/assignments/media-types/media-types.xhtml#font
99+
mime_const!(OTF, "OTF", "font", "otf");
100+
mime_const!(TTF, "TTF", "font", "ttf");
101+
mime_const!(WOFF, "WOFF", "font", "woff");
102+
mime_const!(WOFF2, "WOFF2", "font", "woff2");
103+
104+
// Archives
105+
mime_const!(ZIP, "Zip archive", "application", "zip");
106+
mime_const!(SEVENZIP, "7Zip archive", "application", "x-7z-compressed");

src/mime/mod.rs

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,12 +53,34 @@ impl Mime {
5353
/// Guess the mime type from a file extension
5454
pub fn from_extension(extension: impl AsRef<str>) -> Option<Self> {
5555
match extension.as_ref() {
56+
"7z" => Some(SEVENZIP),
57+
"atom" => Some(ATOM),
58+
"avi" => Some(AVI),
59+
"bin" | "exe" | "dll" | "iso" | "img" => Some(BYTE_STREAM),
60+
"bmp" => Some(BMP),
61+
"css" => Some(CSS),
5662
"html" => Some(HTML),
63+
"ico" => Some(ICO),
5764
"js" | "mjs" | "jsonp" => Some(JAVASCRIPT),
5865
"json" => Some(JSON),
59-
"css" => Some(CSS),
60-
"svg" => Some(SVG),
66+
"m4a" => Some(M4A),
67+
"mid" | "midi" | "kar" => Some(MIDI),
68+
"mp3" => Some(MP3),
69+
"mp4" => Some(MP4),
70+
"mpeg" | "mpg" => Some(MPEG),
71+
"ogg" => Some(OGG),
72+
"otf" => Some(OTF),
73+
"rss" => Some(RSS),
74+
"svg" | "svgz" => Some(SVG),
75+
"ttf" => Some(TTF),
76+
"txt" => Some(PLAIN),
77+
"wasm" => Some(WASM),
78+
"webm" => Some(WEBM),
79+
"webp" => Some(WEBP),
80+
"woff" => Some(WOFF),
81+
"woff2" => Some(WOFF2),
6182
"xml" => Some(XML),
83+
"zip" => Some(ZIP),
6284
_ => None,
6385
}
6486
}

0 commit comments

Comments
 (0)