Skip to content

Commit e685d68

Browse files
committed
rework either hack - still not good
1 parent 594341d commit e685d68

File tree

1 file changed

+15
-11
lines changed

1 file changed

+15
-11
lines changed

src/main/scala/tools/jackson/module/scala/deser/EitherDeserializer.scala

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

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

@@ -75,10 +79,10 @@ private class EitherDeserializer(javaType: JavaType,
7579
val `type` = jp.nextToken()
7680

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

0 commit comments

Comments
 (0)