web: fix compile errors and critical runtime errors

This commit is contained in:
2026-03-08 15:48:20 +01:00
parent 738ba5bd37
commit e09a00a4ba
7 changed files with 105 additions and 61 deletions

View File

@@ -1,17 +1,9 @@
const std = @import("std");
const http = @import("http.zig");
const Connection = @import("Connection.zig");
const Response = @import("Response.zig");
const RequestHandler = @import("RequestHandler.zig");
const RequestRouter = @import("RequestRouter.zig");
const Route = @import("Route.zig");
const Server = @import("Server.zig");
const UUID = @import("UUID.zig");
const Worker = @import("Worker.zig");
const web = @import("web");
const linux = std.os.linux;
const errno = linux.E.init;
const UUID = web.UUID;
var running: std.atomic.Value(bool) = .init(true);
@@ -33,7 +25,7 @@ const Router = struct {
};
}
fn interface(self: *Router) RequestRouter {
fn interface(self: *Router) web.RequestRouter {
return .{
.ptr = self,
.vtable = &.{
@@ -42,11 +34,11 @@ const Router = struct {
};
}
fn onRoute(ctx: *anyopaque, route: Route) !RequestHandler {
fn onRoute(ctx: *anyopaque, route: web.Route) !web.RequestHandler {
const self: *Router = @ptrCast(@alignCast(ctx));
const handler = try self.allocator.create(Handler);
handler.* = .init(self.allocator, route);
handler.* = try .init(self.allocator, route);
return handler.interface();
}
};
@@ -54,7 +46,7 @@ const Router = struct {
const Handler = struct {
allocator: std.mem.Allocator,
route: Route,
route: web.Route,
uuid: UUID,
timer: std.time.Timer,
@@ -63,17 +55,17 @@ const Handler = struct {
accept_language: ?[]const u8 = null,
user_agent: ?[]const u8 = null,
fn init(allocator: std.mem.Allocator, route: Route) Handler {
fn init(allocator: std.mem.Allocator, route: web.Route) !Handler {
return .{
.allocator = allocator,
.route = route,
.uuid = UUID.v7(),
.timer = .start(),
.timer = try .start(),
};
}
fn interface(self: *Handler) RequestHandler {
fn interface(self: *Handler) web.RequestHandler {
return .{
.ptr = self,
.vtable = &.{
@@ -84,7 +76,7 @@ const Handler = struct {
};
}
fn onHeader(ctx: *anyopaque, response: *Response, header: http.Header) void {
fn onHeader(ctx: *anyopaque, response: *web.Response, header: web.http.Header) !void {
const self: *Handler = @ptrCast(@alignCast(ctx));
switch (header.name) {
@@ -101,6 +93,7 @@ const Handler = struct {
.@"User-Agent" => {
self.user_agent = header.value;
},
else => {},
},
.other => {},
}
@@ -108,12 +101,12 @@ const Handler = struct {
_ = response;
}
fn onBody(ctx: *anyopaque, response: *Response, body: []const u8) !void {
fn onBody(ctx: *anyopaque, response: *web.Response, body: []const u8) !void {
const self: *Handler = @ptrCast(@alignCast(ctx));
try response.sendResponse(.{
.media_type = "application/json",
.response_body = "{\"ok\":true}",
.response_body = "{\"ok\":true}\r\n",
});
_ = self;
@@ -126,7 +119,7 @@ const Handler = struct {
const time_ns = self.timer.read();
const time_us_ceil = (time_ns + std.time.ns_per_us - 1) / std.time.ns_per_us;
std.log.info("{s} {s} (<={} [µs])", .{ @tagName(self.route.method), self.route.pathname, time_us_ceil });
std.log.info("{s} {s} ({} µs)", .{ @tagName(self.route.method), self.route.pathname, time_us_ceil });
self.allocator.destroy(self);
}
@@ -141,8 +134,9 @@ pub fn main() !void {
var router: Router = .init(allocator);
var server = try Server.init(allocator, .{
var server = try web.Server.init(allocator, .{
.request_router = router.interface(),
.address = .initIp4(.{ 127, 0, 0, 1 }, 8000),
});
defer server.deinit(allocator);