-
Notifications
You must be signed in to change notification settings - Fork 41
Open
Milestone
Description
I can read field value from one of two JSON-fields with code like this (and it works well):
import tethys._
import tethys.jackson._
import tethys.derivation.builder._
import tethys.derivation.semiauto._
case class Foo(a: Int)
implicit val fooReader: JsonReader[Foo] = jsonReader[Foo] {
ReaderBuilder[Foo]
.extract(_.a)
.from("a".as[Option[Int]], "b".as[Option[Int]])((a, b) =>
a.orElse(b)
.getOrElse(throw new RuntimeException("cannot find 'a' or 'b'"))
)
}
println("""{"b": 2}""".jsonAs[Foo])
// => Right(Foo(2))But the same approach doesn't work if a is Option:
// same imports
case class Foo(a: Option[Int])
implicit val fooReader: JsonReader[Foo] = jsonReader[Foo] {
ReaderBuilder[Foo]
.extract(_.a)
.from("a".as[Option[Int]], "b".as[Option[Int]])((a, b) => a.orElse(b))
}
println("""{"b": 2}""".jsonAs[Foo])
// => Right(Foo(None))
// but expected
// => Right(Foo(2))Is it a bug or my misunderstanding?
I tested it on 0.28.3 and some older versions