primitive MimeTypes
"""
Provide mapping from file names to MIME types.
TODO load from /etc/mime.types
"""
fun apply(name: String): String val^ =>
"""
Mapping is based on the file type, following the last period in the name.
"""
try
// This will fail if no period is found.
let dotpos = (name.rfind(".", -1, 0)? + 1).usize()
match name.trim(dotpos).lower()
| "html" => "text/html"
| "jpg" => "image/jpeg"
| "jpeg" => "image/jpeg"
| "png" => "image/png"
| "css" => "text/css"
| "ico" => "image/x-icon"
| "js" => "application/javascript"
| "mp3" => "audio/mpeg3"
| "m3u" => "audio/mpegurl"
| "ogg" => "audio/ogg"
| "doc" => "application/msword"
| "gif" => "image/gif"
| "txt" => "text/plain"
| "wav" => "audio/wav"
else
"application/octet-stream" // None of the above
end
else
"application/octet-stream" // No filetype
end