diff --git a/build.zig b/build.zig index 7319e09..3642a97 100644 --- a/build.zig +++ b/build.zig @@ -19,7 +19,7 @@ pub fn build(b: *std.build.Builder) !void { src: []const u8, }{ .{ .name = "hello", .src = "examples/hello/hello.zig" }, - // .{ .name = "routes", .src = "examples/routes/routes.zig" }, + .{ .name = "routes", .src = "examples/routes/routes.zig" }, // .{ .name = "serve", .src = "examples/serve/serve.zig" }, }) |excfg| { const ex_name = excfg.name; diff --git a/examples/routes/routes.zig b/examples/routes/routes.zig new file mode 100644 index 0000000..dc62312 --- /dev/null +++ b/examples/routes/routes.zig @@ -0,0 +1,61 @@ +const std = @import("std"); +const zap = @import("zap"); + +fn dispatch_routes(r: zap.SimpleRequest) void { + // dispatch + if (r.path) |the_path| { + if (routes.get(the_path)) |foo| { + foo(r); + } + } + // or default: present menu + _ = r.sendBody( + \\ + \\ + \\

static

+ \\

dynamic

+ \\ + \\ + ); +} + +fn static_site(r: zap.SimpleRequest) void { + _ = r.sendBody("

Hello from STATIC ZAP!

"); +} + +var dynamic_counter: i32 = 0; +fn dynamic_site(r: zap.SimpleRequest) void { + dynamic_counter += 1; + var buf: [128]u8 = undefined; + const filled_buf = std.fmt.bufPrintZ( + &buf, + "

Hello # {d} from DYNAMIC ZAP!!!

", + .{dynamic_counter}, + ) catch "ERROR"; + _ = r.sendBody(std.mem.span(filled_buf)); +} + +fn setup_routes(a: std.mem.Allocator) !void { + routes = std.StringHashMap(zap.SimpleHttpRequestFn).init(a); + try routes.put("/static", static_site); + try routes.put("/dynamic", dynamic_site); +} + +var routes: std.StringHashMap(zap.SimpleHttpRequestFn) = undefined; + +pub fn main() !void { + try setup_routes(std.heap.page_allocator); + var listener = zap.SimpleHttpListener.init(.{ + .port = 3000, + .on_request = dispatch_routes, + .log = true, + }); + try listener.listen(); + + std.debug.print("Listening on 0.0.0.0:3000\n", .{}); + + zap.start(.{ + .threads = 2, + .workers = 2, + }); +}