mimetypes: init module mimetypes

This commit is contained in:
Jeremy Baxter 2024-08-07 13:09:14 +12:00
parent 810b78fc95
commit 03201fd28d
3 changed files with 1249 additions and 1 deletions

View file

@ -1,7 +1,7 @@
DC = ldc2
CFLAGS = -Jstatic -Oz
OBJS = httpd.o
OBJS = httpd.o mimetypes.o
all: httpd

46
mimetypes.d Normal file
View file

@ -0,0 +1,46 @@
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];
}

1202
static/mimetypes.csv Normal file

File diff suppressed because it is too large Load diff