An HTTP/1.1 server for zig
0

Configure Feed

Select the types of activity you want to include in your feed.

Fix examples and some of the code for 0.15

Based on: https://github.com/karlseguin/http.zig/pull/150

Karl Seguin (Aug 24, 2025, 7:51 PM +0800) 90e7fc07 c36e80f9

+17 -13
+11 -8
examples/01_basic.zig
··· 81 81 res.content_type = httpz.ContentType.JSON; 82 82 83 83 const name = req.param("name").?; 84 - var ws = std.json.writeStream(res.writer(), .{ .whitespace = .indent_4 }); 85 - try ws.beginObject(); 86 - try ws.objectField("name"); 87 - try ws.write(name); 88 - try ws.endObject(); 84 + 85 + var w = res.writer(); 86 + try std.json.Stringify.value( 87 + .{ .name = name }, 88 + .{ .whitespace = .indent_4 }, 89 + &w.interface, 90 + ); 89 91 } 90 92 91 93 fn metrics(_: *httpz.Request, res: *httpz.Response) !void { 92 94 // httpz exposes some prometheus-style metrics 93 - return httpz.writeMetrics(res.writer()); 95 + var w = res.writer(); 96 + return httpz.writeMetrics(&w.interface); 94 97 } 95 98 96 99 fn formShow(_: *httpz.Request, res: *httpz.Response) !void { ··· 109 112 110 113 res.content_type = .TEXT; 111 114 112 - const w = res.writer(); 115 + var w = res.writer(); 113 116 while (it.next()) |kv| { 114 - try std.fmt.format(w, "{s}={s}\n", .{ kv.key, kv.value }); 117 + try w.interface.print("{s}={s}\n", .{ kv.key, kv.value }); 115 118 } 116 119 } 117 120
+3 -3
examples/09_shutdown.zig
··· 44 44 try server.listen(); 45 45 } 46 46 47 - fn shutdown(_: c_int) callconv(.C) void { 47 + fn shutdown(_: c_int) callconv(.c) void { 48 48 if (server_instance) |server| { 49 49 server_instance = null; 50 50 server.stop(); ··· 52 52 } 53 53 54 54 fn index(_: *httpz.Request, res: *httpz.Response) !void { 55 - const writer = res.writer(); 56 - return std.fmt.format(writer, "To shutdown, run:\nkill -s int {d}", .{std.c.getpid()}); 55 + var writer = res.writer(); 56 + return writer.interface.print("To shutdown, run:\nkill -s int {d}", .{std.c.getpid()}); 57 57 }
+1 -1
src/httpz.zig
··· 32 32 33 33 const MAX_REQUEST_COUNT = std.math.maxInt(usize); 34 34 35 - pub fn writeMetrics(writer: anytype) !void { 35 + pub fn writeMetrics(writer: *std.Io.Writer) !void { 36 36 return @import("metrics.zig").write(writer); 37 37 } 38 38
+2 -1
src/metrics.zig
··· 1 + const std = @import("std"); 1 2 const m = @import("metrics"); 2 3 3 4 // This is an advanced usage of metrics.zig, largely done because we aren't ··· 55 56 body_too_big: m.Counter(usize).Impl, 56 57 }; 57 58 58 - pub fn write(writer: anytype) !void { 59 + pub fn write(writer: *std.Io.Writer) !void { 59 60 try metrics.connections.write(writer); 60 61 try metrics.requests.write(writer); 61 62 try metrics.timeout_request.write(writer);