1
0
Fork 0
mirror of https://github.com/zigzap/zap.git synced 2025-10-20 23:24:09 +00:00

endpoints progress

This commit is contained in:
Rene Schallner 2023-01-14 16:59:16 +01:00
parent b0ca939082
commit 4d70181701
3 changed files with 39 additions and 32 deletions

View file

@ -326,7 +326,7 @@ pub fn main() !void {
### [endpoints](examples/endpoints/)
Only showing `main.zig` here:
[`main.zig`](examples/endpoints/main.zig):
```zig
const std = @import("std");
@ -369,3 +369,6 @@ pub fn main() !void {
});
}
```
[`endpoints.zig`](examples/endpoints/endpoints.zig):

View file

@ -57,23 +57,12 @@ fn userIdFromPath(path: []const u8) ?usize {
return null;
}
var jsonbuf: [100 * 1024]u8 = undefined;
fn stringify(value: anytype, options: std.json.StringifyOptions) ?[]const u8 {
var fba = std.heap.FixedBufferAllocator.init(&jsonbuf);
var string = std.ArrayList(u8).init(fba.allocator());
if (std.json.stringify(value, options, string.writer())) {
return string.items;
} else |_| { // error
return null;
}
}
pub fn getUser(e: *zap.SimpleEndpoint, r: zap.SimpleRequest) void {
_ = e;
if (r.path) |path| {
if (userIdFromPath(path)) |id| {
if (users.get(id)) |user| {
if (stringify(user, .{})) |json| {
if (Users.stringify(user, .{})) |json| {
_ = r.sendJson(json);
}
}
@ -81,31 +70,13 @@ pub fn getUser(e: *zap.SimpleEndpoint, r: zap.SimpleRequest) void {
}
}
fn stringifyUserList(
userlist: *std.ArrayList(Users.User),
options: std.json.StringifyOptions,
) !?[]const u8 {
var fba = std.heap.FixedBufferAllocator.init(&jsonbuf);
var string = std.ArrayList(u8).init(fba.allocator());
var writer = string.writer();
try writer.writeByte('[');
var first: bool = true;
for (userlist.items) |user| {
if (!first) try writer.writeByte(',');
first = false;
try std.json.stringify(user, options, string.writer());
}
try writer.writeByte(']');
return string.items;
}
pub fn listUsers(e: *zap.SimpleEndpoint, r: zap.SimpleRequest) void {
_ = e;
var l: std.ArrayList(Users.User) = std.ArrayList(Users.User).init(alloc);
if (users.list(&l)) {} else |_| {
return;
}
if (stringifyUserList(&l, .{})) |maybe_json| {
if (Users.stringifyUserList(&l, .{})) |maybe_json| {
if (maybe_json) |json| {
_ = r.sendJson(json);
}

View file

@ -111,3 +111,36 @@ const JsonUserIterator = struct {
return null;
}
};
//
// JSON helpers
//
var jsonbuf: [100 * 1024]u8 = undefined;
pub fn stringify(value: anytype, options: std.json.StringifyOptions) ?[]const u8 {
var fba = std.heap.FixedBufferAllocator.init(&jsonbuf);
var string = std.ArrayList(u8).init(fba.allocator());
if (std.json.stringify(value, options, string.writer())) {
return string.items;
} else |_| { // error
return null;
}
}
pub fn stringifyUserList(
userlist: *std.ArrayList(User),
options: std.json.StringifyOptions,
) !?[]const u8 {
var fba = std.heap.FixedBufferAllocator.init(&jsonbuf);
var string = std.ArrayList(u8).init(fba.allocator());
var writer = string.writer();
try writer.writeByte('[');
var first: bool = true;
for (userlist.items) |user| {
if (!first) try writer.writeByte(',');
first = false;
try std.json.stringify(user, options, string.writer());
}
try writer.writeByte(']');
return string.items;
}