-
const std = @import("std");
const print = @import("std").debug.print;
const httpz = @import("httpz");
const KV = struct {
key: []const u8,
value: u64,
};
const MyStruct = struct {
list: std.ArrayList(KV),
const Self = @This();
pub fn jsonStringify(self: Self, out: anytype) !void {
try out.beginObject();
try out.objectField("list");
try out.write(self.list.items);
try out.endObject();
}
};
pub fn main() !void {
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
const allocator = gpa.allocator();
defer {
const deinit_status = gpa.deinit();
if (deinit_status == .leak) @panic("TEST FAIL");
}
const t = try std.Thread.spawn(.{}, run, .{allocator});
t.join();
}
pub fn run(allocator: std.mem.Allocator) !void {
var server = try httpz.Server(void).init(allocator, .{ .port = 8369 }, {});
defer {
print("deinit server\n", .{});
server.stop();
server.deinit();
}
const cors = try server.middleware(httpz.middleware.Cors, .{
.origin = "http://127.0.0.1:5374/",
});
const router = try server.router(.{ .middlewares = &.{cors} });
var group = router.group("/api/v1", .{});
group.get("/rules", getRules, .{});
try server.listen();
}
fn getRules(_: *httpz.Request, res: *httpz.Response) !void {
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
const allocator = gpa.allocator();
defer {
const deinit_status = gpa.deinit();
if (deinit_status == .leak) @panic("TEST FAIL");
}
// var array = std.ArrayList(std.StringHashMap(u64)).init(allocator);
// defer array.deinit();
const value: u64 = 100;
const a = std.net.Address.parseIp("127.0.0.1", 8000);
var buffer: [100]u8 = undefined;
const a_str = std.fmt.bufPrint(buffer[0..], "{!} {d}", .{ a, 6 }) catch unreachable;
var my_struct = MyStruct{
.list = std.ArrayList(KV).init(allocator),
};
defer my_struct.list.deinit();
const kv = KV{
.key = a_str,
.value = value,
};
my_struct.list.append(kv) catch unreachable;
// const json = try std.json.stringifyAlloc(allocator, my_struct, .{});
// defer allocator.free(json);
try res.json(.{ .code = 200, .data = my_struct }, .{});
}
|
Beta Was this translation helpful? Give feedback.
Answered by
Hevienz
Mar 6, 2025
Replies: 1 comment
-
根据测试,GeneralPurposeAllocator是线程安全的。 |
Beta Was this translation helpful? Give feedback.
0 replies
Answer selected by
Hevienz
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
根据测试,GeneralPurposeAllocator是线程安全的。