Circe: рдПрдиреНрдХреЛрдбрд░/рдбрд┐рдХреЛрдбрд░ рдХреА рдХрдореА рдХреЗ рджреМрд░рд╛рди рдмреЗрдХрд╛рд░ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐

рдХреЛ рдирд┐рд░реНрдорд┐рдд 15 рдЕрдЧре░ 2015  ┬╖  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!
рддрд╛рд░реАрдЦ рдХреЛ рдбреАрдХреЛрдб рдФрд░ рдПрдиреНрдХреЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдирд┐рд╣рд┐рдд

  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(_)))

рддрд┐рдерд┐ рдХреЗ рдХрд╛рд░рдг рдХрдИ рдкреНрд░рд╛рд░реВрдк рд╣реИрдВ, рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЗрд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЬреЗрдПрдлрд╕реА рдореЗрдВ рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░рд╛рд░реВрдк рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд╣рд╛рдБ, рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рднрдпрд╛рдирдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рд╣реИ - рдЗрд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рд╕рд╛рдорд╛рдиреНрдп рд╡реНрдпреБрддреНрдкрддреНрддрд┐ рддрдВрддреНрд░ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди #30 рдХреЗ рд╕рд╛рде рдмрджрд▓ рд░рд╣рд╛ рд╣реЛрдЧрд╛, рдЬрд┐рд╕реЗ рдореИрдВ рдХрд▓ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдЙрд╕рдХреЗ рдмрд╛рдж рдзреВрд▓ рдЬрдордиреЗ рдХреЗ рдмрд╛рдж рдореИрдВ рдЗрд╕ рдкрд░ рдФрд░ #34 рдкрд░ рдлрд┐рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рддрдм рддрдХ рдЪреАрдЬреЗрдВ рдереЛрдбрд╝реА рдЕрд▓рдЧ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдЗрди рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдХреБрдЫ рдЬрдЧрд╣реЛрдВ рдкрд░ @implicitNotFound рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдлрд┐рдВрдЪ рдореЗрдВ рдпрд╣ рд╕рдВрджреЗрд╢ рджреЗрдЦреЗрдВ)ред

рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдиреЙрдЯрдлрд╛рдЙрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП +1!
рддрд╛рд░реАрдЦ рдХреЛ рдбреАрдХреЛрдб рдФрд░ рдПрдиреНрдХреЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдирд┐рд╣рд┐рдд

  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(_)))

рддрд┐рдерд┐ рдХреЗ рдХрд╛рд░рдг рдХрдИ рдкреНрд░рд╛рд░реВрдк рд╣реИрдВ, рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЗрд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЬреЗрдПрдлрд╕реА рдореЗрдВ рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░рд╛рд░реВрдк рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред

рдореИрдВ рдЖрдЧреЗ рдмрдврд╝реВрдВрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдмрдВрдж рдХрд░реВрдВрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдПрдХ рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╕реБрдзрд╛рд░ рд╣реИ:

<console>:59: error: could not find implicit value for parameter e: io.circe.Encoder[Foo]
           println(f.asJson.noSpaces)
                     ^

рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдо @implicitNotFound рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╢рд╛рдпрдж рдбреЙрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реВрдЪрдХ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

LukaJCB picture LukaJCB  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

calippo picture calippo  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

migesok picture migesok  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

nathankleyn picture nathankleyn  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

dwijnand picture dwijnand  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ