Skip to content

Commit c0a2ec7

Browse files
authored
Fix missing field name in an error for duplicated fields (#768)
1 parent 7629e75 commit c0a2ec7

File tree

2 files changed

+8
-7
lines changed

2 files changed

+8
-7
lines changed

zio-schema-json/shared/src/main/scala/zio/schema/codec/JsonCodec.scala

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -940,7 +940,7 @@ object JsonCodec {
940940
val fieldName = span.field
941941
val prev = map.put(fieldName, dec.unsafeDecode(trace_, in))
942942
if (prev != null) {
943-
throw UnsafeJson(JsonError.Message("duplicate") :: trace)
943+
throw UnsafeJson(JsonError.Message("duplicate") :: trace_)
944944
}
945945
} else if (rejectAdditionalFields) {
946946
throw UnsafeJson(JsonError.Message(s"unexpected field: $fieldNameOrAlias") :: trace)
@@ -1499,8 +1499,9 @@ object JsonCodec {
14991499
val idx = Lexer.field(trace, reader, stringMatrix)
15001500
if (pos == discriminator) Lexer.skipValue(trace, reader)
15011501
else if (idx >= 0) {
1502-
if (buffer(idx) != null) error(trace, "duplicate")
1503-
else buffer(idx) = fieldDecoders(idx).unsafeDecode(spans(idx) :: trace, reader)
1502+
val trace_ = spans(idx) :: trace
1503+
if (buffer(idx) != null) error(trace_, "duplicate")
1504+
else buffer(idx) = fieldDecoders(idx).unsafeDecode(trace_, reader)
15041505
} else if (!rejectExtraFields) Lexer.skipValue(trace, reader)
15051506
else error(trace, "extra field")
15061507
continue = Lexer.nextField(trace, reader)

zio-schema-json/shared/src/test/scala/zio/schema/codec/JsonCodecSpec.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -721,12 +721,12 @@ object JsonCodecSpec extends ZIOSpecDefault {
721721
assertDecodesToError(
722722
recordSchema,
723723
"""{"foo":"test","bar":10,"foo":10}""",
724-
JsonError.Message("duplicate") :: Nil
724+
JsonError.Message("duplicate") :: JsonError.ObjectAccess("foo") :: Nil
725725
) &>
726726
assertDecodesToError(
727727
recordSchema,
728728
"""{"bar":10,"foo":"test","bar":"100"}""",
729-
JsonError.Message("duplicate") :: Nil
729+
JsonError.Message("duplicate") :: JsonError.ObjectAccess("bar") :: Nil
730730
)
731731
},
732732
test("optional field with schema or annotated default value") {
@@ -837,12 +837,12 @@ object JsonCodecSpec extends ZIOSpecDefault {
837837
assertDecodesToError(
838838
personSchema,
839839
"""{"name":"test","age":10,"name":10}""",
840-
JsonError.Message("duplicate") :: Nil
840+
JsonError.Message("duplicate") :: JsonError.ObjectAccess("name") :: Nil
841841
) &>
842842
assertDecodesToError(
843843
personSchema,
844844
"""{"age":10,"name":"test","age":"100"}""",
845-
JsonError.Message("duplicate") :: Nil
845+
JsonError.Message("duplicate") :: JsonError.ObjectAccess("age") :: Nil
846846
)
847847
},
848848
test("transient field annotation with default value in class definition") {

0 commit comments

Comments
 (0)