srctree

Gregory Mullen parent 90996fb3 b1574ce5
expand the server API to take an Auth handler

examples/basic.zig added: 50, removed: 32, total 18
@@ -12,7 +12,10 @@ pub fn main() !void {
defer _ = gpa.deinit();
const alloc = gpa.allocator();
 
var server = try Verse.Server.init(alloc, .{ .http = .{ .port = 8080 } }, .{ .routefn = route });
var server = try Verse.Server.init(alloc, .{
.mode = .{ .http = .{ .port = 8080 } },
.router = .{ .routefn = route },
});
 
server.serve() catch |err| {
std.debug.print("error: {any}", .{err});
 
examples/cookies.zig added: 50, removed: 32, total 18
@@ -17,7 +17,10 @@ pub fn main() !void {
defer _ = gpa.deinit();
const alloc = gpa.allocator();
 
var server = try Verse.Server.init(alloc, .{ .http = .{ .port = 8081 } }, .{ .routefn = route });
var server = try Verse.Server.init(alloc, .{
.mode = .{ .http = .{ .port = 8081 } },
.router = .{ .routefn = route },
});
 
server.serve() catch |err| {
std.debug.print("error: {any}", .{err});
 
examples/endpoint.zig added: 50, removed: 32, total 18
@@ -4,10 +4,9 @@ const Endpoints = Endpoint.Endpoints(.{
 
pub fn main() !void {
var endpoints = Endpoints.init();
endpoints.serve(
std.heap.page_allocator,
.{ .http = .{ .port = 8084 } },
) catch |err| {
endpoints.serve(std.heap.page_allocator, .{
.mode = .{ .http = .{ .port = 8084 } },
}) catch |err| {
std.log.err("Unable to serve endpoints! err: [{}]", .{err});
@panic("endpoint error");
};
 
examples/template.zig added: 50, removed: 32, total 18
@@ -12,11 +12,10 @@ pub fn main() !void {
defer _ = gpa.deinit();
const alloc = gpa.allocator();
 
var server = try Verse.Server.init(
alloc,
.{ .http = .{ .port = 8082 } },
.{ .routefn = route },
);
var server = try Verse.Server.init(alloc, .{
.mode = .{ .http = .{ .port = 8082 } },
.router = .{ .routefn = route },
});
 
server.serve() catch |err| {
std.debug.print("error: {any}", .{err});
 
src/endpoint.zig added: 50, removed: 32, total 18
@@ -6,6 +6,11 @@ pub const Target = struct {
name: []const u8,
};
 
pub const Options = struct {
mode: Verse.Server.RunMode = .{ .http = .{} },
auth: Verse.Auth.AnyAuth = .{ .ctx = undefined, .vtable = Verse.Auth.VTable.DefaultEmpty },
};
 
pub fn Endpoints(endpoints: anytype) type {
if (@typeInfo(@TypeOf(endpoints)).Struct.is_tuple == false) return error.InvalidEndpointTypes;
inline for (endpoints) |ep| {
@@ -21,8 +26,11 @@ pub fn Endpoints(endpoints: anytype) type {
return .{};
}
 
pub fn serve(_: *Self, a: Allocator, options: Verse.Server.Options) !void {
var server = try Verse.Server.init(a, options, .{ .routefn = route });
pub fn serve(_: *Self, a: Allocator, options: Options) !void {
var server = try Verse.Server.init(a, .{
.mode = options.mode,
.router = .{ .routefn = route },
});
try server.serve();
}
 
 
src/server.zig added: 50, removed: 32, total 18
@@ -13,31 +13,37 @@ alloc: Allocator,
router: Router,
interface: Interface,
 
pub const RunMode = enum {
pub const RunModes = enum {
zwsgi,
http,
other,
};
 
pub const Interface = union(RunMode) {
zwsgi: zWSGI,
http: Http,
other: void,
};
 
pub const Options = union(RunMode) {
pub const RunMode = union(RunModes) {
zwsgi: zWSGI.Options,
http: Http.Options,
other: void,
};
 
pub fn init(a: Allocator, opts: Options, router: Router) !Server {
pub const Interface = union(RunModes) {
zwsgi: zWSGI,
http: Http,
other: void,
};
 
pub const Options = struct {
mode: RunMode = .{ .http = .{} },
router: Router,
auth: Verse.Auth.AnyAuth = .{ .ctx = undefined, .vtable = Verse.Auth.VTable.DefaultEmpty },
};
 
pub fn init(a: Allocator, opts: Options) !Server {
return .{
.alloc = a,
.router = router,
.interface = switch (opts) {
.zwsgi => .{ .zwsgi = zWSGI.init(a, opts.zwsgi, router) },
.http => .{ .http = try Http.init(a, opts.http, router) },
.router = opts.router,
.interface = switch (opts.mode) {
.zwsgi => |z| .{ .zwsgi = zWSGI.init(a, z, opts.router) },
.http => |h| .{ .http = try Http.init(a, h, opts.router) },
.other => unreachable,
},
};