Skip to content

Commit 9c03646

Browse files
committed
rework either hack - still not good
1 parent 8ea88f6 commit 9c03646

File tree

1 file changed

+15
-11
lines changed

1 file changed

+15
-11
lines changed

src/main/scala/com/fasterxml/jackson/module/scala/deser/EitherDeserializer.scala

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,13 @@ private class EitherDeserializer(javaType: JavaType,
3333
val rightDeserializerConfig = deserializerConfigFor(1, property)
3434
new EitherDeserializer(javaType, config, leftDeserializerConfig, rightDeserializerConfig)
3535
case 1 =>
36-
val leftDeserializerConfig = deserializerConfigFor(0, property)
37-
val rightDeserializerConfig = deserializerConfigFor(0, property)
38-
new EitherDeserializer(javaType, config, leftDeserializerConfig, rightDeserializerConfig)
36+
if (javaType.getBindings.getBoundName(0) == "A") {
37+
val leftDeserializerConfig = deserializerConfigFor(0, property)
38+
new EitherDeserializer(javaType, config, leftDeserializerConfig, ElementDeserializerConfig.empty)
39+
} else {
40+
val rightDeserializerConfig = deserializerConfigFor(0, property)
41+
new EitherDeserializer(javaType, config, ElementDeserializerConfig.empty, rightDeserializerConfig)
42+
}
3943
case _ => this
4044
}
4145
}
@@ -58,10 +62,10 @@ private class EitherDeserializer(javaType: JavaType,
5862
val `type` = jp.nextToken()
5963

6064
val result = key match {
61-
case ("l") => Left(deserializeValue(`type`, leftDeserializerConfig, jp, ctxt))
62-
case ("left") => Left(deserializeValue(`type`, leftDeserializerConfig, jp, ctxt))
63-
case ("r") => Right(deserializeValue(`type`, rightDeserializerConfig, jp, ctxt))
64-
case ("right") => Right(deserializeValue(`type`, rightDeserializerConfig, jp, ctxt))
65+
case "l" => Left(deserializeValue(`type`, leftDeserializerConfig, jp, ctxt))
66+
case "left" => Left(deserializeValue(`type`, leftDeserializerConfig, jp, ctxt))
67+
case "r" => Right(deserializeValue(`type`, rightDeserializerConfig, jp, ctxt))
68+
case "right" => Right(deserializeValue(`type`, rightDeserializerConfig, jp, ctxt))
6569
case _ => ctxt.handleUnexpectedToken(javaType, jp).asInstanceOf[Either[AnyRef, AnyRef]]
6670
}
6771

@@ -74,10 +78,10 @@ private class EitherDeserializer(javaType: JavaType,
7478
val `type` = jp.nextToken()
7579

7680
val result = key match {
77-
case ("l") => Left(deserializeValue(`type`, leftDeserializerConfig, jp, ctxt))
78-
case ("left") => Left(deserializeValue(`type`, leftDeserializerConfig, jp, ctxt))
79-
case ("r") => Right(deserializeValue(`type`, rightDeserializerConfig, jp, ctxt))
80-
case ("right") => Right(deserializeValue(`type`, rightDeserializerConfig, jp, ctxt))
81+
case "l" => Left(deserializeValue(`type`, leftDeserializerConfig, jp, ctxt))
82+
case "left" => Left(deserializeValue(`type`, leftDeserializerConfig, jp, ctxt))
83+
case "r" => Right(deserializeValue(`type`, rightDeserializerConfig, jp, ctxt))
84+
case "right" => Right(deserializeValue(`type`, rightDeserializerConfig, jp, ctxt))
8185
case _ => ctxt.handleUnexpectedToken(javaType, jp).asInstanceOf[Either[AnyRef, AnyRef]]
8286
}
8387

0 commit comments

Comments
 (0)