diff --git a/src/script/Schema.zig b/src/script/Schema.zig index c55e7d7f..1b92768f 100644 --- a/src/script/Schema.zig +++ b/src/script/Schema.zig @@ -246,7 +246,9 @@ fn buildValue(self: Schema, arena: std.mem.Allocator, pairs: []const KvPair, dia try obj.ensureTotalCapacity(pairs.len); for (pairs) |p| { const v = try self.coerce(arena, p.key, p.value, diag); - try obj.put(p.key, v); + const gop = try obj.getOrPut(p.key); + if (gop.found_existing) return error.DuplicateField; + gop.value_ptr.* = v; } return .{ .object = obj }; } @@ -745,6 +747,10 @@ test "parseValue: duplicate case-variants of the same field are rejected" { error.DuplicateField, click.parseValue(arena.allocator(), "{\"Selector\":\"#a\",\"selector\":\"#b\"}"), ); + try testing.expectError( + error.DuplicateField, + click.parseValue(arena.allocator(), "Selector='#a' selector='#b'"), + ); } test "parseValue: setChecked defaults checked=true when omitted" {