Move body parsing to new fn

This commit is contained in:
jaina heartles 2022-07-12 21:41:26 -07:00
parent d27c38330b
commit b3c9c3b600

View file

@ -49,11 +49,21 @@ fn respondJson(ctx: *http.server.Context, status: http.Status, value: anytype, a
try stream.finish(); try stream.finish();
} }
fn createNote(srv: *RequestServer, ctx: *http.server.Context, _: RouteArgs) !void { fn parseRequestBody(comptime T: type, ctx: *http.server.Context, alloc: std.mem.Allocator) !T {
const body = ctx.request.body orelse return respondJson(ctx, .bad_request, .{ .@"error" = "'content' cannot be empty" }, srv.alloc); const body = ctx.request.body orelse return error.BodyRequired;
var tokens = std.json.TokenStream.init(body); var tokens = std.json.TokenStream.init(body);
const info = try std.json.parse(api.CreateInfo(models.Note), &tokens, .{ .allocator = srv.alloc }); const parsed = try std.json.parse(T, &tokens, .{ .allocator = alloc });
defer std.json.parseFree(api.CreateInfo(models.Note), info, .{ .allocator = srv.alloc });
return parsed;
}
fn freeRequestBody(value: anytype, alloc: std.mem.Allocator) void {
std.json.parseFree(@TypeOf(value), value, .{ .allocator = alloc });
}
fn createNote(srv: *RequestServer, ctx: *http.server.Context, _: RouteArgs) !void {
const info = try parseRequestBody(api.CreateInfo(models.Note), ctx, srv.alloc);
defer freeRequestBody(info, srv.alloc);
const note = try srv.api.createNote(info); const note = try srv.api.createNote(info);