From 04cfde051fb547bd75c328c70362e88f8c1805db Mon Sep 17 00:00:00 2001 From: Altagos Date: Mon, 16 Feb 2026 13:58:58 +0100 Subject: [PATCH] fix http abstraction --- src/st/http.zig | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/src/st/http.zig b/src/st/http.zig index 07daf55..ad819c2 100644 --- a/src/st/http.zig +++ b/src/st/http.zig @@ -3,10 +3,9 @@ const HTTPClient = std.http.Client; const Io = std.Io; const json = std.json; +const buildin = @import("builtin"); const models = @import("models.zig"); -const TIME_SLEEP_FACTOR: f64 = 0.98; - const log = std.log.scoped(.SpaceTraders); const Semaphore = struct { @@ -307,6 +306,12 @@ pub const Client = struct { ); } + const user_agent = blk: { + const os = std.fmt.comptimePrint("{}", .{buildin.os.tag})[1..]; + const arch = std.fmt.comptimePrint("{}", .{buildin.cpu.arch})[1..]; + break :blk "space/0.1 (" ++ buildin.zig_version_string ++ "/" ++ os ++ "/" ++ arch ++ "; https://tangled.org/altagos.dev/space; +agent)"; + }; + pub fn requestRaw( client: *Client, comptime T: type, @@ -321,7 +326,7 @@ pub const Client = struct { var req = try client.http.request(opts.method, uri, .{ .headers = .{ .authorization = opts.authorization(client), - .user_agent = .{ .override = "SPACE/0.1" }, + .user_agent = .{ .override = user_agent }, .content_type = .{ .override = "application/json" }, }, }); @@ -366,11 +371,9 @@ pub const Client = struct { client.average_latency.store(new_average, .seq_cst); _ = client.total_latency.fetchAdd(latency, .seq_cst); - log.debug("latency: {} ms - average: {}ms", .{ latency, new_average }); - log.debug( - "\x1b[2m[path = {s}]\x1b[0m received {s}{d} {s}\x1b[0m", - .{ url[client.base_url.len..], colour, response.head.status, response.head.reason }, + "\x1b[2m[latency = {d}ms path = {s}]\x1b[0m received {s}{d} {s}\x1b[0m", + .{ latency, url[client.base_url.len..], colour, response.head.status, response.head.reason }, ); // var header_iter = response.head.iterateHeaders(); @@ -382,16 +385,24 @@ pub const Client = struct { var transfer_buffer: [64]u8 = undefined; var decompress: std.http.Decompress = undefined; - const decompressed_body_reader = response.readerDecompressing(&transfer_buffer, &decompress, &decompress_buffer); + const decompressed_body_reader = response.readerDecompressing( + &transfer_buffer, + &decompress, + &decompress_buffer, + ); + + const body = decompressed_body_reader.allocRemaining(client.allocator, .unlimited) catch + return RequestError.OutOfMemory; + defer client.allocator.free(body); - var json_reader: json.Reader = .init(client.allocator, decompressed_body_reader); + var reader: Io.Reader = .fixed(body); + var json_reader: json.Reader = .init(client.allocator, &reader); defer json_reader.deinit(); const result = json.parseFromTokenSource(T, client.allocator, &json_reader, .{ .ignore_unknown_fields = true, }) catch |err| { - log.err("Error parsing response: {}", .{err}); - + log.err("Error parsing response: {} - Body:\n{s}", .{ err, body }); return RequestError.InvalidResponse; }; -- 2.51.2