srctree

Gregory Mullen parent f2a16cfc 455e4aba
provide the new routing functions requried by verse

src/main.zig added: 37, removed: 14, total 23
@@ -122,12 +122,10 @@ pub fn main() !void {
const thread = try Thread.spawn(.{}, Repos.updateThread, .{&agent_config});
defer thread.join();
 
var server = try Verse.Server.init(
a,
runmode,
.{ .routefn = Srctree.router, .buildfn = Srctree.build },
.{ .zwsgi = .{ .file = "./srctree.sock" } },
);
var server = try Verse.Server.init(a, runmode, .{
.routefn = Srctree.router,
.builderfn = Srctree.builder,
}, .{ .zwsgi = .{ .file = "./srctree.sock" } });
 
server.serve() catch {
if (@errorReturnTrace()) |trace| {
 
src/srctree.zig added: 37, removed: 14, total 23
@@ -1,3 +1,4 @@
const std = @import("std");
const Verse = @import("verse");
const Router = Verse.Router;
const Template = Verse.Template;
@@ -58,12 +59,36 @@ pub fn router(ctx: *Verse) Router.Error!BuildFn {
return Router.router(ctx, &routes);
}
 
// TODO replace with better API
pub fn build(ctx: *Verse, call: BuildFn) Router.Error!void {
pub fn builder(ctx: *Verse, call: BuildFn) void {
return call(ctx) catch |err| switch (err) {
error.InvalidURI,
error.Unrouteable,
=> notFound(ctx),
else => return err,
error.InvalidURI => builder(ctx, notFound), // TODO catch inline
error.NetworkCrash => std.debug.print("client disconnect", .{}),
error.Unrouteable => {
std.debug.print("Unrouteable", .{});
if (@errorReturnTrace()) |trace| {
std.debug.dumpStackTrace(trace.*);
}
},
error.NotImplemented,
error.Unknown,
error.OutOfMemory,
error.NoSpaceLeft,
=> {
std.debug.print("Unexpected error '{}'", .{err});
@panic("not implemented");
},
error.Abusive,
error.Unauthenticated,
error.BadData,
error.DataMissing,
=> {
std.debug.print("Abusive {} because {}", .{ ctx.request, err });
for (ctx.request.raw.zwsgi.vars) |vars| {
std.debug.print("Abusive var '{s}' => '''{s}'''", .{ vars.key, vars.val });
}
if (ctx.reqdata.post) |post_data| {
std.debug.print("post data => '''{s}'''", .{post_data.rawpost});
}
},
};
}