Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cannot override reader builder of Option field #299

Open
anton0xf opened this issue Jun 18, 2024 · 2 comments
Open

Cannot override reader builder of Option field #299

anton0xf opened this issue Jun 18, 2024 · 2 comments

Comments

@anton0xf
Copy link

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))

Playground

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))

Playground

Is it a bug or my misunderstanding?

I tested it on 0.28.3 and some older versions

@anton0xf
Copy link
Author

It is even works well if I don't mention "a" fielld:

case class Foo(a: Option[Int])

implicit val fooReader: JsonReader[Foo] = jsonReader[Foo] {
  ReaderBuilder[Foo]
    .extract(_.a)
    .from("c".as[Option[Int]], "b".as[Option[Int]])((c, b) => c.orElse(b))
}

println("""{"b": 2}""".jsonAs[Foo]) // => Right(Foo(Some(2)))
println("""{"c": 2}""".jsonAs[Foo]) // => Right(Foo(Some(2)))

Playground

@dos65
Copy link
Collaborator

dos65 commented Jun 27, 2024

Thanks for reporting! That's indeed looks like a bug

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants