Circe: خطأ ترجمة عديم الفائدة في حين تفتقر إلى وحدة التشفير / وحدة فك التشفير

تم إنشاؤها على ١٥ أغسطس ٢٠١٥  ·  3تعليقات  ·  مصدر: circe/circe

إذا لم يكن هناك تشفير للتاريخ ، فإن المترجم يشكو

 [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)
  }
}

التعليق الأكثر فائدة

+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.

ال 3 كومينتر

نعم ، هذه رسالة خطأ فظيعة جدًا - شكرًا على الإشارة إليها.

سيتغير تنفيذ آلية الاشتقاق العامة مع # 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 في هذه الحالة ، باستثناء ربما مؤشر إلى المستندات.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات