From a907ef9fadf1d3eae5a0166233a5b03eee59e4bf Mon Sep 17 00:00:00 2001 From: Louis Pearson Date: Tue, 23 Apr 2024 16:44:18 -0600 Subject: [PATCH] feat: Wrap mimetypeRegister and mimetypeClear --- src/http.zig | 18 ++++++++++++++++++ tools/docserver.zig | 9 +-------- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/http.zig b/src/http.zig index 5241c3f..6a93e11 100644 --- a/src/http.zig +++ b/src/http.zig @@ -1,4 +1,5 @@ const std = @import("std"); +const fio = @import("fio.zig"); /// HTTP Status codes according to `rfc7231` /// https://tools.ietf.org/html/rfc7231#section-6 @@ -126,3 +127,20 @@ pub fn methodToEnum(method: ?[]const u8) Method { return Method.UNKNOWN; } } + +/// Registers a new mimetype to be used for files ending with the given extension. +pub fn mimetypeRegister(file_extension: []const u8, mime_type_str: []const u8) void { + // NOTE: facil.io is expecting a non-const pointer to u8 values, but it does not + // not appear to actually modify the value. Here we do a const cast so + // that it is easy to pass static strings to http_mimetype_register without + // needing to allocate a buffer on the heap. + const extension = @constCast(file_extension); + const mimetype = fio.fiobj_str_new(mime_type_str.ptr, mime_type_str.len); + + fio.http_mimetype_register(extension.ptr, extension.len, mimetype); +} + +/// Clears the Mime-Type registry (it will be empty after this call). +pub fn mimetypeClear() void { + fio.http_mimetype_clear(); +} diff --git a/tools/docserver.zig b/tools/docserver.zig index 8e7cca7..e5a918e 100644 --- a/tools/docserver.zig +++ b/tools/docserver.zig @@ -26,14 +26,7 @@ pub fn main() !void { } } - const ext = "wasm"; - var buf: [0xF]u8 = undefined; - @memcpy(buf[0..ext.len], ext); - - const mimetype = "application/wasm"; - const fio_mimetype = zap.fio.fiobj_str_new(mimetype[0..], mimetype.len); - - zap.fio.http_mimetype_register(buf[0..ext.len], ext.len, fio_mimetype); + zap.mimetypeRegister("wasm", "application/wasm"); var listener = zap.HttpListener.init(.{ .port = port,