J'ai une classe de cas paramétrée CaseClass[T](name: String, t: T)
pour lequel je voudrais avoir une sérialisation/désérialisation en utilisant play-json (2.5).
Bien sûr, je ne peux pas avoir cela si je n'ai pas l'équivalent pour le type T
donc je définis
object CaseClass {
implicit def reads[T: Reads] = Json.reads[CaseClass[T]]
}
Mais j'obtiens l'erreur de compilation suivante :
overloaded method value apply with alternatives:
[B](f: B => (String, T))(implicit fu: play.api.libs.functional.ContravariantFunctor[play.api.libs.json.Reads])play.api.libs.json.Reads[B] <and>
[B](f: (String, T) => B)(implicit fu: play.api.libs.functional.Functor[play.api.libs.json.Reads])play.api.libs.json.Reads[B]
cannot be applied to ((String, Nothing) => CaseClass[Nothing])
Si j'essaie de faire la même chose avec le Json.writes
j'obtiens l'erreur suivante
type mismatch;
found : CaseClass[Nothing] => (String, Nothing)
required: CaseClass[T] => (String, T)
Ce qui est le plus surprenant, c'est qu'aucune de ces erreurs ne se produit lorsque j'utilise la fonction Json.format
macro.
Je sais que j'ai différentes solutions pour contourner ce problème (utilisation de Json.format
, écrire mon (dé)sérialiseur à la main, ...), mais je suis plutôt curieux de savoir pourquoi cela peut se produire ici.