إذا لم يكن هناك تشفير للتاريخ ، فإن المترجم يشكو
[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
هل هناك أي فرصة لتحسين الإبلاغ عن الخطأ؟
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)
}
}
نعم ، هذه رسالة خطأ فظيعة جدًا - شكرًا على الإشارة إليها.
سيتغير تنفيذ آلية الاشتقاق العامة مع # 30 ، والتي آمل أن أنجزها غدًا ، لذلك بعد أن يستقر الغبار ، سأعيد النظر في هذا و # 34 ، نظرًا لأن الأمور قد تكون مختلفة قليلاً بحلول ذلك الوقت. يجب أن نكون قادرين على استخدام @implicitNotFound
في أماكن قليلة لتحسين هذه الرسائل كثيرًا (انظر على سبيل المثال هذه الرسالة في Finch).
+1 لاستخدام implicitNotFound!
لفك تشفير التاريخ وترميزه ، صير ضمنيًا
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(_)))
نظرًا لأن التاريخ يحتوي على العديد من التنسيقات ، أقترح تحديده في المستند وعدم إضافة تنسيق افتراضي في jfc.
سأمضي قدمًا وأغلق هذا لأن ما يلي يعد تحسنًا كبيرًا:
<console>:59: error: could not find implicit value for parameter e: io.circe.Encoder[Foo]
println(f.asJson.noSpaces)
^
لست متأكدًا في الواقع من وجود الكثير من المعلومات المفيدة الإضافية التي يمكننا إضافتها باستخدام @implicitNotFound
في هذه الحالة ، باستثناء ربما مؤشر إلى المستندات.
التعليق الأكثر فائدة
+1 لاستخدام implicitNotFound!
لفك تشفير التاريخ وترميزه ، صير ضمنيًا
نظرًا لأن التاريخ يحتوي على العديد من التنسيقات ، أقترح تحديده في المستند وعدم إضافة تنسيق افتراضي في jfc.