mirror of
https://github.com/zigzap/zap.git
synced 2025-10-20 23:24:09 +00:00
some refactoring
This commit is contained in:
parent
2c2814144e
commit
508b1a12c0
5 changed files with 56 additions and 55 deletions
|
@ -49,7 +49,7 @@ pub fn build(b: *std.Build) !void {
|
|||
.{ .name = "hello", .src = "examples/hello/hello.zig" },
|
||||
.{ .name = "https", .src = "examples/https/https.zig" },
|
||||
.{ .name = "hello2", .src = "examples/hello2/hello2.zig" },
|
||||
.{ .name = "hello3", .src = "examples/hello3/hello3.zig" },
|
||||
.{ .name = "simple_router", .src = "examples/simple_router/simple_router.zig" },
|
||||
.{ .name = "routes", .src = "examples/routes/routes.zig" },
|
||||
.{ .name = "serve", .src = "examples/serve/serve.zig" },
|
||||
.{ .name = "hello_json", .src = "examples/hello_json/hello_json.zig" },
|
||||
|
|
|
@ -7,34 +7,16 @@ const RouterError = error{
|
|||
EmptyPath,
|
||||
};
|
||||
|
||||
// inline closure for RequestFn with self argument
|
||||
pub inline fn RequestHandler(self: anytype, func: *const fn (@TypeOf(self), zap.Request) void) *const fn (zap.Request) void {
|
||||
return (opaque {
|
||||
var hidden_self: @TypeOf(self) = undefined;
|
||||
var hidden_func: *const fn (@TypeOf(self), zap.Request) void = undefined;
|
||||
pub fn init(h_self: @TypeOf(self), h_func: *const fn (@TypeOf(self), zap.Request) void) *const @TypeOf(run) {
|
||||
hidden_self = h_self;
|
||||
hidden_func = h_func;
|
||||
return &run;
|
||||
}
|
||||
const Self = @This();
|
||||
|
||||
fn run(req: zap.Request) void {
|
||||
hidden_func(hidden_self, req);
|
||||
}
|
||||
}).init(self, func);
|
||||
}
|
||||
|
||||
pub const RouterOptions = struct {
|
||||
pub const Options = struct {
|
||||
not_found: ?zap.HttpRequestFn = null,
|
||||
};
|
||||
|
||||
pub const Router = struct {
|
||||
const Self = @This();
|
||||
|
||||
routes: std.StringHashMap(zap.HttpRequestFn),
|
||||
not_found: ?zap.HttpRequestFn,
|
||||
|
||||
pub fn init(allocator: Allocator, options: RouterOptions) Self {
|
||||
pub fn init(allocator: Allocator, options: Options) Self {
|
||||
return .{
|
||||
.routes = std.StringHashMap(zap.HttpRequestFn).init(allocator),
|
||||
|
||||
|
@ -61,7 +43,9 @@ pub const Router = struct {
|
|||
}
|
||||
|
||||
pub fn serve(self: *Self, r: zap.Request) void {
|
||||
var route = self.routes.get(r.path.?);
|
||||
const path = if (r.path) |p| p else "/";
|
||||
|
||||
var route = self.routes.get(path);
|
||||
|
||||
if (route) |handler| {
|
||||
handler(r);
|
||||
|
@ -74,4 +58,3 @@ pub const Router = struct {
|
|||
r.sendBody("404 Not Found") catch return;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
18
src/util.zig
18
src/util.zig
|
@ -1,5 +1,23 @@
|
|||
const std = @import("std");
|
||||
const fio = @import("fio.zig");
|
||||
const zap = @import("zap.zig");
|
||||
|
||||
/// capture self for RequestFn signature support
|
||||
pub inline fn RequestHandler(self: anytype, func: *const fn (@TypeOf(self), zap.Request) void) *const fn (zap.Request) void {
|
||||
return (opaque {
|
||||
var hidden_self: @TypeOf(self) = undefined;
|
||||
var hidden_func: *const fn (@TypeOf(self), zap.Request) void = undefined;
|
||||
pub fn init(h_self: @TypeOf(self), h_func: *const fn (@TypeOf(self), zap.Request) void) *const @TypeOf(run) {
|
||||
hidden_self = h_self;
|
||||
hidden_func = h_func;
|
||||
return &run;
|
||||
}
|
||||
|
||||
fn run(req: zap.Request) void {
|
||||
hidden_func(hidden_self, req);
|
||||
}
|
||||
}).init(self, func);
|
||||
}
|
||||
|
||||
/// Used internally: convert a FIO object into its string representation.
|
||||
/// note: since this is called from within request functions, we don't make
|
||||
|
|
|
@ -52,7 +52,7 @@ pub const Tls = @import("tls.zig");
|
|||
/// ```
|
||||
pub const Endpoint = @import("endpoint.zig");
|
||||
|
||||
pub usingnamespace @import("router.zig");
|
||||
pub const Router = @import("router.zig");
|
||||
|
||||
pub usingnamespace @import("util.zig");
|
||||
pub usingnamespace @import("http.zig");
|
||||
|
|
Loading…
Add table
Reference in a new issue