diff --git a/lib/std/zon/Serializer.zig b/lib/std/zon/Serializer.zig index c30c0e09d8051c0eafab2e8e4ba2a85d46aa1db2..9839129e316906fd20110f47ae40c28d193f8ec4 100644 --- a/lib/std/zon/Serializer.zig +++ b/lib/std/zon/Serializer.zig @@ -122,7 +122,7 @@ pub fn valueMaxDepth(self: *Serializer, val: anytype, options: ValueOptions, dep /// Serialize a value, similar to `serializeArbitraryDepth`. pub fn valueArbitraryDepth(self: *Serializer, val: anytype, options: ValueOptions) Error!void { - comptime assert(canSerializeType(@TypeOf(val))); + comptime assertCanSerializeType(@TypeOf(val)); switch (@typeInfo(@TypeOf(val))) { .int, .comptime_int => if (options.emit_codepoint_literals.emitAsCodepoint(val)) |c| { self.codePoint(c) catch |err| switch (err) { @@ -321,7 +321,7 @@ pub fn tupleArbitraryDepth( } fn tupleImpl(self: *Serializer, val: anytype, options: ValueOptions) Error!void { - comptime assert(canSerializeType(@TypeOf(val))); + comptime assertCanSerializeType(@TypeOf(val)); switch (@typeInfo(@TypeOf(val))) { .@"struct" => { var container = try self.beginTuple(.{ .whitespace_style = .{ .fields = val.len } }); @@ -814,6 +814,10 @@ test checkValueDepth { try expectValueDepthEquals(3, @as([]const []const u8, &.{&.{ 1, 2, 3 }})); } +inline fn assertCanSerializeType(T: type) void { + if (!canSerializeType(T)) @compileError("cannot serialize: " ++ @typeName(T)); +} + inline fn canSerializeType(T: type) bool { comptime return canSerializeTypeInner(T, &.{}, false); }