Given the following JSON structure
val rawJson =
"""
|{
| "users": [
| {
| "name": "Mario",
| "age": 10,
| "address": {
| "street": "13 Blvd",
| "postcode": "ABC 123"
| }
| },
| {
| "name": "Wario",
| "age": 70,
| "address": {
| "street": "22 Blvd",
| "postcode": "CBA 321"
| }
| }
| ]
|}
""".stripMargin
and the corresponding model
case class Address(street: String, postcode: String)
case class User(name: String, age: Int, address: Address)
case class RequestBody(users: List[User])
circe is able to automatically deserialise with
decode[RequestBody](rawJson))
Is automatic deserialisation possible when the model is defined via structural type like so
case class RequestBody(users: List[ {
val name: String
val age: Int
val address: {
val street: String
val postcode: String
}
}])
I guess no. Circe uses Shapeless under the hood for deriving codecs. And Shapeless works for ADT i.e. sealed trait + case classes. Structural types are not ADT.