diff options
Diffstat (limited to 'src/main.zig')
| -rw-r--r-- | src/main.zig | 57 |
1 files changed, 38 insertions, 19 deletions
diff --git a/src/main.zig b/src/main.zig index b5260bc..b98b112 100644 --- a/src/main.zig +++ b/src/main.zig @@ -1,27 +1,46 @@ const std = @import("std"); const storyboard = @import("storyboard"); +pub const std_options = std.Options { + .logFn = storyboard.log.handler, +}; + +const log = std.log.scoped(.main); + pub fn main() !void { - // Prints to stderr, ignoring potential errors. - std.debug.print("All your {s} are belong to us.\n", .{"codebase"}); - try storyboard.bufferedPrint(); -} + var gpa = std.heap.GeneralPurposeAllocator(.{}){}; + defer std.debug.assert(gpa.deinit() == .ok); -test "simple test" { - const gpa = std.testing.allocator; - var list: std.ArrayList(i32) = .empty; - defer list.deinit(gpa); // Try commenting this out and see if zig detects the memory leak! - try list.append(gpa, 42); - try std.testing.expectEqual(@as(i32, 42), list.pop()); -} + const allocator = gpa.allocator(); + + const address = try std.net.Address.parseIpAndPort("127.0.0.1:8080"); + var net_server = try address.listen(.{}); + defer net_server.deinit(); + + log.info("listening on {f}", .{address}); + + while (true) { + const connection = net_server.accept() catch |err| { + log.err("error: {}", .{err}); + continue; + }; + defer connection.stream.close(); + + var read_buf: [1024 * 8]u8 = undefined; + var write_buf: [1024 * 8]u8 = undefined; + var reader = connection.stream.reader(&read_buf); + var writer = connection.stream.writer(&write_buf); + var http_server = std.http.Server.init(reader.interface(), &writer.interface); + + while (true) { + var request = http_server.receiveHead() catch break; + log.info("{} {s}", .{request.head.method, request.head.target}); + + const handler = storyboard.routes.get(request.head.target); -test "fuzz example" { - const Context = struct { - fn testOne(context: @This(), input: []const u8) anyerror!void { - _ = context; - // Try passing `--fuzz` to `zig build test` and see if it manages to fail this test case! - try std.testing.expect(!std.mem.eql(u8, "canyoufindme", input)); + handler(&request, allocator) catch |err| { + log.err("handler({s}): {}", .{request.head.target, err}); + }; } - }; - try std.testing.fuzz(Context{}, Context.testOne, .{}); + } } |