aboutsummaryrefslogtreecommitdiff
path: root/src/main.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.zig')
-rw-r--r--src/main.zig57
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, .{});
+ }
}