I need to create an updated instance from a case class instance (with any needed DecodeJson
s implicitly derived), given an incomplete json (some fields missing). Ho
For the sake of completeness: support for "patching" instances like this has been provided in circe since the 0.2 release:
import io.circe.jawn.decode, io.circe.generic.auto._
case class Person(name: String, age: Int)
val person = Person("mr complete", 42)
val incompletePersonJson = """{"name":"mr updated"}"""
val update = decode[Person => Person](incompletePersonJson)
And then:
scala> println(update.map(_(person)))
Right(Person(mr updated,42))
My original blog post about this technique uses Argonaut (mostly since I wrote it a couple of months before I started working on circe), and that implementation is available as a library, although I've never published it anywhere.