I have 3 case classes:
scala> case class Friend(id: Long, hobbies: List[Long])
defined class Friend
scala> case class Kid(friends: List[Friend])
defined class Kid
scala> case class Parent(kids: List[Kid])
defined class Parent
They can be shown through a hierarchy (Parent has Kid(s) has Friend(s) has (id and hobbies).
Parent
---> Kid
---> Friend
---> id: Long
---> hobbies: List[Long]
I created the FriendsReads
(even though, as senia pointed out here, I could've just used
scala> implicit val FriendReads: Reads[Friend] = Json.format[Friend]
FriendReads: play.api.libs.json.Reads[Friend] = play.api.libs.json.OFormat$$anon$1@236b2692
scala> implicit val FriendReads: Reads[Friend] = (
| (JsPath \ "id").read[Long] and
| (JsPath \ "hobbies").read[List[Long]]
| )(Friend.apply _)
FriendReads: play.api.libs.json.Reads[Friend] = play.api.libs.json.Reads$$anon$8@4bb7bb4
Then, when I tried to create the KidReads
, I ran into a compile-time problem.
scala> implicit val KidReads: Reads[Kid] = (
| (JsPath \ "friends").read[List[Friend]]
| )(Kid.apply _)
<console>:40: error: overloaded method value read with alternatives:
(t: List[Friend])play.api.libs.json.Reads[List[Friend]] <and>
(implicit r: play.api.libs.json.Reads[List[Friend]])play.api.libs.json.Reads[List[Friend]]
cannot be applied to (List[Friend] => Kid)
(JsPath \ "friends").read[List[Friend]]
^
How can I resolve this error?