From 687e62466a82c81eb437b062be4f50c5569941a6 Mon Sep 17 00:00:00 2001 From: CJ van den Berg Date: Mon, 20 Jan 2025 15:29:47 +0100 Subject: [PATCH 1/3] build: update zig-tracy for win32 support --- build.zig.zon | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.zig.zon b/build.zig.zon index bdc73a8..ef47a31 100644 --- a/build.zig.zon +++ b/build.zig.zon @@ -8,8 +8,8 @@ .hash = "1220c85e0d9438ec518849c84e3ea66633a0e191e49c4ae4bbb3bc46626cd8dfad75", }, .tracy = .{ - .url = "https://github.com/neurocyte/zig-tracy/archive/58999b786089e5319dd0707f6afbfca04c6340e7.tar.gz", - .hash = "1220a2c8f8db1b5265458ac967ea1f7cc0a8ddcd1d774df3b73d86c4f529aadbfb94", + .url = "https://github.com/neurocyte/zig-tracy/archive/e04e31c64498149a324491b8534758e6af43a5c2.tar.gz", + .hash = "1220d0fb2bff7b453dbb39d1db3eb472b6680e2564f2b23b0e947671be47bbdd188f", }, }, .paths = .{ From f0cf0e7aacba0606e3a3cd45e04274fd6749f8dc Mon Sep 17 00:00:00 2001 From: CJ van den Berg Date: Fri, 24 Jan 2025 12:42:33 +0100 Subject: [PATCH 2/3] feat: add message formatter --- src/cbor.zig | 11 ++++++++++- 1 file changed, 10 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(); From 34b2bf28d926a3040eaf696d8392a1c183f97a2c Mon Sep 17 00:00:00 2001 From: CJ van den Berg Date: Wed, 29 Jan 2025 15:32:34 +0100 Subject: [PATCH 3/3] feat: support matching and extracting enums --- src/cbor.zig | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/cbor.zig b/src/cbor.zig index c922a1d..f20b1f6 100644 --- a/src/cbor.zig +++ b/src/cbor.zig @@ -522,6 +522,21 @@ fn matchFloatValue(comptime T: type, iter: *[]const u8, val: T) Error!bool { return if (try matchFloat(T, iter, &v)) v == val else false; } +pub fn matchEnum(comptime T: type, iter_: *[]const u8, val: *T) Error!bool { + var iter = iter_.*; + var str: []const u8 = undefined; + if (try matchString(&iter, &str)) if (std.meta.stringToEnum(T, str)) |val_| { + val.* = val_; + iter_.* = iter; + return true; + }; + return false; +} + +fn matchEnumValue(comptime T: type, iter: *[]const u8, val: T) Error!bool { + return matchStringValue(iter, @tagName(val)); +} + fn skipString(iter: *[]const u8, minor: u5) Error!void { const len: usize = @intCast(try decodePInt(iter, minor)); if (iter.len < len) @@ -657,6 +672,7 @@ pub fn matchValue(iter: *[]const u8, value: anytype) Error!bool { .Array => |info| if (info.child == u8) matchStringValue(iter, &value) else matchArray(iter, value, info), .Float => return matchFloatValue(T, iter, value), .ComptimeFloat => matchFloatValue(f64, iter, value), + .Enum => matchEnumValue(T, iter, value), else => @compileError("cannot match value type '" ++ @typeName(T) ++ "' to cbor stream"), }; } @@ -855,6 +871,7 @@ fn Extractor(comptime T: type) type { return false; }, .Float => return matchFloat(T, iter, self.dest), + .Enum => return matchEnum(T, iter, self.dest), else => extractError(T), } }