Wenn das Datum nicht codiert ist, beschwert sich der Compiler
[error] /home/jilen/workspace/jfc-test/src/main/scala/Foo.scala:26: diverging implicit expansion for type io.circe.Encoder.Secondary[this.Out]
[error] starting with method encodeCaseClass in trait GenericInstances
Gibt es eine Möglichkeit, die Fehlerberichterstattung zu verbessern?
import io.circe._
import io.circe.generic.auto._
import io.circe.syntax._
import java.util.Date
case class Foo(
date: Date,
number: Int,
str: String)
object App {
def encodesDate(fmt: String): Encoder[Date] = new Encoder[Date] {
def apply(a: Date) = {
val sdf = new java.text.SimpleDateFormat(fmt)
Json.string(sdf.format(a))
}
}
def main(args: Array[String]) {
//implicit val DateEncodes = encodesDate("yyyy-MM-dd HH:mm:ss")
val f = Foo(new Date, 1, "fff")
println(f.asJson.noSpaces)
}
}
Ja, das ist eine ziemlich schreckliche Fehlermeldung – danke für den Hinweis.
Die Implementierung des generischen Ableitungsmechanismus wird sich mit #30 ändern, was ich hoffentlich morgen erledigen werde, also werde ich, nachdem sich der Staub gelegt hat, dies und #34 noch einmal durchgehen, da die Dinge bis dahin etwas anders sein könnten. Wir sollten in der Lage sein, @implicitNotFound
an einigen Stellen zu verwenden, um diese Nachrichten stark zu verbessern (siehe zum Beispiel diese Nachricht in Finch).
+1 um implizitNotFound zu verwenden!
Um Daten zu decodieren und zu codieren, nur implizit
implicit val dateTimeEncoder: Encoder[DateTime] = Encoder.instance(a => a.getMillis.asJson)
implicit val dateTimeDecoder: Decoder[DateTime] = Decoder.instance(a => a.as[Long].map(new DateTime(_)))
Da das Datum viele Formate hat, schlage ich vor, es in der Dokumentation zu definieren und kein Standardformat in jfc hinzuzufügen.
Ich werde fortfahren und dies schließen, da das Folgende eine enorme Verbesserung darstellt:
<console>:59: error: could not find implicit value for parameter e: io.circe.Encoder[Foo]
println(f.asJson.noSpaces)
^
Ich bin mir nicht sicher, ob es in diesem Fall viele zusätzliche nützliche Informationen gibt, die wir mit @implicitNotFound
hinzufügen könnten, abgesehen vielleicht von einem Verweis auf die Dokumentation.
Hilfreichster Kommentar
+1 um implizitNotFound zu verwenden!
Um Daten zu decodieren und zu codieren, nur implizit
Da das Datum viele Formate hat, schlage ich vor, es in der Dokumentation zu definieren und kein Standardformat in jfc hinzuzufügen.