2017-03-28 1 views
1

Mise à niveau Circé de 0.4.1 à 0.7.0 a brisé le code suivant:Codage/Décodage records informes avec Circé

import shapeless._ 
import syntax.singleton._ 
import io.circe.generic.auto._ 

.run[Record.`'transaction_id -> Int`.T](transport) 

def run[A](transport: Json => Future[Json])(implicit decoder: Decoder[A], exec: ExecutionContext): Future[A] 

Avec l'erreur suivante:

could not find implicit value for parameter decoder: io.circe.Decoder[shapeless.::[Int with shapeless.labelled.KeyTag[Symbol with shapeless.tag.Tagged[String("transaction_id")],Int],shapeless.HNil]] 
[error]  .run[Record.`'transaction_id -> Int`.T](transport) 
[error]           ^

Suis-je manque une certaine importance ici ou ces encodeurs/décodeurs ne sont-ils plus disponibles dans circe?

Répondre

1

Les occurrences des listes, enregistrements, etc. de Shapeless ont été déplacées vers un module distinct de forme circulaire dans la version 0.6.0 de circe. Si vous ajoutez ce module à votre construction, ce qui suit devrait fonctionner:

import io.circe.jawn.decode, io.circe.shapes._ 
import shapeless._, record.Record, syntax.singleton._ 

val doc = """{ "transaction_id": 1 }""" 

val res = decode[Record.`'transaction_id -> Int`.T](doc) 

La motivation pour déplacer ces cas est que la dérivation générique améliorée introduite dans 0,6 signifie qu'ils ne sont plus nécessaires, et les garder hors de La portée implicite lorsqu'elles ne sont pas nécessaires est à la fois plus propre et prend potentiellement en charge des temps de compilation plus rapides. Le nouveau module de formes de circe comprend également des fonctions qui n'étaient pas disponibles dans circe-generic, telles que les instances pour les coproduits.

+0

Un grand merci pour cela. Impossible de trouver cette division nulle part. – simao