Skip to content

Commit e24f38a

Browse files
paulpdaniels987Nabilkhajavi
authored
Fix the json decoder for case classes that only have None fields. (#677)
Co-authored-by: Nabil Abdel-Hafeez <7283535+987Nabil@users.noreply.github.com> Co-authored-by: Milad Khajavi <khajavi@gmail.com>
1 parent fffdab0 commit e24f38a

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1344,7 +1344,7 @@ object JsonCodec {
13441344

13451345
if (discriminator == -1) {
13461346
Lexer.char(trace, in, '{')
1347-
loop(0, in)
1347+
if (Lexer.firstField(trace, in)) loop(0, in)
13481348
} else if (discriminator == -2) {
13491349
if (Lexer.nextField(trace, in)) loop(0, in)
13501350
} else {

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1121,6 +1121,9 @@ object JsonCodecSpec extends ZIOSpecDefault {
11211121
},
11221122
test("object") {
11231123
assertEncodesThenDecodes(schemaObject, Singleton)
1124+
},
1125+
test("all optional fields empty") {
1126+
assertEncodesThenDecodes(AllOptionalFields.schema, AllOptionalFields(None, None, None))
11241127
}
11251128
),
11261129
suite("record")(
@@ -1854,4 +1857,14 @@ object JsonCodecSpec extends ZIOSpecDefault {
18541857
implicit lazy val mapSchema: Schema[Map[KeyWrapper, ValueWrapper]] = Schema.map[KeyWrapper, ValueWrapper]
18551858
implicit lazy val schema: Schema[MapOfComplexKeysAndValues] = DeriveSchema.gen[MapOfComplexKeysAndValues]
18561859
}
1860+
1861+
final case class AllOptionalFields(
1862+
name: Option[String],
1863+
mode: Option[Int],
1864+
active: Option[Boolean]
1865+
)
1866+
1867+
object AllOptionalFields {
1868+
implicit lazy val schema: Schema[AllOptionalFields] = DeriveSchema.gen[AllOptionalFields]
1869+
}
18571870
}

0 commit comments

Comments
 (0)