httpd/mimetypes.d

46 lines
737 B
D

module mimetypes;
import std.csv;
import std.traits;
string[string] mimeTypes;
static this()
{
mimeTypes = mimeMapping!("mimetypes.csv");
}
template mimeMapping(string csvFile, T = string[string])
if (isAssociativeArray!T)
{
enum mimeMapping = makeMimeMapping!(import(csvFile), T);
}
private T
makeMimeMapping(string csv, T)()
if (isAssociativeArray!T)
{
T result;
foreach (record; csvReader!T(csv, null)) {
result[record["Extension"]] = record["Type"];
}
return result;
}
string
mimeType(string fileName) @safe
{
import std.path : extension;
import std.uni : toLower;
string ext;
ext = fileName.extension();
if (!ext)
return "application/octet-stream";
ext = ext[1 .. $].toLower();
return mimeTypes[ext];
}