J'essaie d'utiliser des discriminateurs dans le projet existant et quelque chose ne va pas avec mes classes je suppose.Missing scodec.Codec [Command] implicite à cause de la classe avec des champs sans valeur
Considérez ceci scodec example. Si je change TurnLeft
et son codec à
sealed class TurnLeft(degrees: Int) extends Command {
def getDegrees: Int = degrees
}
implicit val leftCodec: Codec[TurnLeft] = uint8or16.xmap[TurnLeft](v => new TurnLeft(v), _.getDegrees)
Je reçois
Error:(x, x) could not find Lazy implicit value of type scodec.Codec[Command]
val codec: Codec[Either[UnrecognizedCommand, Command]] = discriminatorFallback(unrecognizedCodec, Codec[Command])
tout cela fonctionne si je fais champ de valeur du champ degrees
. Je soupçonne que c'est quelque chose de difficile avec Shapeless. Que dois-je faire pour le faire fonctionner?
Exemple de projet qui illustre le problème: here.
Génial! Merci, Miles. Question secondaire à ce sujet. La définition de ces vals va-t-elle doubler l'empreinte mémoire d'une classe donnée? – expert
Il n'y a qu'un seul val ici: l'argument constructeur d'une classe non-case ne génère pas de val sauf s'il est explicitement marqué comme tel. –
Je vois. J'ai supposé qu'il devait encore être stocké quelque part si '' '' '' '' '' '' – expert