【发布时间】:2022-07-21 04:58:01
【问题描述】:
我有这个最小的例子,我想为通用案例类A[T]创建具有circe半自动派生的编码器/解码器
import io.circe.{Decoder, Encoder}
import io.circe.generic.semiauto._
import io.circe.syntax._
sealed trait MyTrait
object MyTrait {
implicit val encoder: Encoder[MyTrait] = deriveEncoder
implicit val decoder: Decoder[MyTrait] = deriveDecoder
}
case class A[T](value: T) extends MyTrait
object A {
implicit def encoder[T: Encoder]: Encoder[A[T]] = deriveEncoder
implicit def decoder[T: Decoder]: Decoder[A[T]] = deriveDecoder
}
此代码无法编译,而是输出此错误
could not find Lazy implicit value of type io.circe.generic.encoding.DerivedAsObjectEncoder[A]
解码器也是如此
我在这里做错了什么,我怎样才能让它工作?
【问题讨论】:
-
circe 有时很神奇。在您的情况下,首先尝试拆分问题:如何为特征创建解码器,以及如何为
case class A[T](value: T)创建解码器。在最后一种情况下,您可能需要为T创建上限。见stackoverflow.com/questions/59993193/… -
特征(ADT)你可以在这里看到:circe.github.io/circe/codecs/adt.html