From d884d8ba59aeff1bafb0b66e4ddc1a23c24c6b24 Mon Sep 17 00:00:00 2001 From: CJ van den Berg Date: Fri, 24 Jan 2025 12:42:33 +0100 Subject: [PATCH] feat: add message formatter --- src/cbor.zig | 11 ++++++++++- src/thespian.zig | 4 ++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/cbor.zig b/src/cbor.zig index f202518..c922a1d 100644 --- a/src/cbor.zig +++ b/src/cbor.zig @@ -897,8 +897,11 @@ pub fn extract_cbor(dest: *[]const u8) CborExtractor { } pub fn JsonStream(comptime T: type) type { + return JsonStreamWriter(T.Writer); +} + +pub fn JsonStreamWriter(comptime Writer: type) type { return struct { - const Writer = T.Writer; const JsonWriter = json.WriteStream(Writer, .{ .checked_to_fixed_depth = 256 }); fn jsonWriteArray(w: *JsonWriter, iter: *[]const u8, minor: u5) !void { @@ -954,6 +957,12 @@ pub fn toJson(cbor_buf: []const u8, json_buf: []u8) (JsonEncodeError || error{No return fbs.getWritten(); } +pub fn toJsonWriter(cbor_buf: []const u8, writer: anytype, options: std.json.StringifyOptions) !void { + var s = json.writeStream(writer, options); + var iter: []const u8 = cbor_buf; + try JsonStreamWriter(@TypeOf(writer)).jsonWriteValue(&s, &iter); +} + pub fn toJsonAlloc(a: std.mem.Allocator, cbor_buf: []const u8) (JsonEncodeError)![]const u8 { var buf = std.ArrayList(u8).init(a); defer buf.deinit(); diff --git a/src/thespian.zig b/src/thespian.zig index 19bdcf0..28f6a70 100644 --- a/src/thespian.zig +++ b/src/thespian.zig @@ -207,6 +207,10 @@ pub const message = struct { pub fn match(self: Self, m: anytype) error{Exit}!bool { return if (cbor.match(self.buf, m)) |ret| ret else |e| exit_error(e, @errorReturnTrace()); } + + pub fn format(self: @This(), comptime _: []const u8, _: std.fmt.FormatOptions, writer: anytype) !void { + return cbor.toJsonWriter(self.buf, writer, .{}); + } }; pub fn exit_message(e: anytype, stack_trace: ?*std.builtin.StackTrace) message {