Skip to content

Commit 20c02df

Browse files
committed
Remove handling of impossible -2 value for discriminator
1 parent d5abfb5 commit 20c02df

File tree

1 file changed

+9
-28
lines changed

1 file changed

+9
-28
lines changed

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

Lines changed: 9 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -868,14 +868,9 @@ object JsonCodec {
868868
Lexer.char(trace_, rr, ':')
869869
if (discriminatorFieldName == discriminatorName) {
870870
val discriminatorFieldValue = Lexer.string(trace, rr).toString
871-
// Perform a second de-aliasing because the first one would resolve the discriminator key instead.
872-
val innerSubtype = deAliasCaseName(discriminatorFieldValue, caseNameAliases)
873-
(innerSubtype, JsonError.ObjectAccess(innerSubtype) :: trace_, {
874-
if (index > 0) {
875-
rr.rewind()
876-
index
877-
} else -2
878-
})
871+
rr.rewind()
872+
val subtype = deAliasCaseName(discriminatorFieldValue, caseNameAliases)
873+
(subtype, JsonError.ObjectAccess(subtype) :: trace_, index)
879874
} else {
880875
Lexer.skipValue(trace_, rr)
881876
if (Lexer.nextField(trace, rr)) findDiscriminator(index + 1, rr)
@@ -885,15 +880,9 @@ object JsonCodec {
885880

886881
val rr = RecordingReader(in)
887882
val (subtype, trace_, discriminator) = findDiscriminator(0, rr)
888-
889883
cases.find(_.id == subtype) match {
890884
case Some(c) =>
891-
schemaDecoder(c.schema, discriminator)
892-
.unsafeDecode(trace_, {
893-
if (discriminator >= 0) rr
894-
else in
895-
})
896-
.asInstanceOf[Z]
885+
schemaDecoder(c.schema, discriminator).unsafeDecode(trace_, rr).asInstanceOf[Z]
897886
case _ =>
898887
throw UnsafeJson(JsonError.Message("unrecognized subtype") :: trace_)
899888
}
@@ -1104,12 +1093,8 @@ object JsonCodec {
11041093
private[codec] def caseClass0Decoder[Z](discriminator: Int, schema: Schema.CaseClass0[Z]): ZJsonDecoder[Z] = {
11051094
val rejectExtraFields = schema.annotations.exists(_.isInstanceOf[rejectExtraFields])
11061095
(trace: List[JsonError], in: RetractReader) => {
1107-
var continue =
1108-
if (discriminator == -2) Lexer.nextField(trace, in)
1109-
else {
1110-
if (discriminator == -1) Lexer.char(trace, in, '{')
1111-
Lexer.firstField(trace, in)
1112-
}
1096+
if (discriminator == -1) Lexer.char(trace, in, '{')
1097+
var continue = Lexer.firstField(trace, in)
11131098
while (continue) {
11141099
if (rejectExtraFields) {
11151100
throw UnsafeJson(JsonError.Message("extra field") :: trace)
@@ -1486,13 +1471,9 @@ object JsonCodec {
14861471
val len = fields.length
14871472
val buffer = new Array[Any](len)
14881473
var reader = in
1489-
var continue =
1490-
if (discriminator == -2) Lexer.nextField(trace, reader)
1491-
else {
1492-
if (discriminator == -1) Lexer.char(trace, reader, '{')
1493-
else reader = RecordingReader(reader)
1494-
Lexer.firstField(trace, reader)
1495-
}
1474+
if (discriminator == -1) Lexer.char(trace, reader, '{')
1475+
else reader = RecordingReader(reader)
1476+
var continue = Lexer.firstField(trace, reader)
14961477
var pos = 0
14971478
while (continue) {
14981479
val idx = Lexer.field(trace, reader, stringMatrix)

0 commit comments

Comments
 (0)