Nous avons une API qui a toujours un total-count
et entities
dans la réponse, mais les entities
sont de types différents. Ce que j'essaye de faire est de rendre l'analyse & convertissant en cas-classes plus générique.Comment définir une hiérarchie pour un analyseur générique json-spray?
donc essayer avec les types suivants
case class StandardReturn[A](
`total-count`: Double,
entities: List[A]
)
case class System(
id: String,
name: String
)
Et l'exemple suivant:
object SystemProtocol extends DefaultJsonProtocol {
implicit val systemFormat: RootJsonFormat[System] =
jsonFormat2(System)
implicit def entityFormat[A: JsonFormat] =
jsonFormat(StandardReturn.apply[A], "total-count", "entities")
}
import SystemProtocol._
val response = """{
"total-count": 10,
"entities": [
{ "id": "1", "name": "me" }
]
}"""
class Example {
def transform[A: JsonReader](entityString: String) =
entityString.parseJson
.convertTo[A]
.entities // Where I'm running into trouble
}
object Example {
val transformed = new Example().transform[StandardReturn[System]](response)
}
Example.transformed
Ce qui me donne naturellement
Error:(34, 42) value entities is not a member of type parameter A
entityString.parseJson.convertTo[A].entities // Where I'm running into trouble
^
Comment puis-je mettre en place les classes de cas/types de sorte que transform
pourrait être assuré que entities
sera toujours s existe après la conversion au type A
(où A
est StandardReturn[A]
)? Je ne connais pas trop le système de type de scala, merci de votre aide.