ΠΡΠ»ΠΈ Π΄Π»Ρ Π΄Π°ΡΡ Π½Π΅Ρ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠΈ, ΡΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΆΠ°Π»ΡΠ΅ΡΡΡ
[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.