如何在 circe 的 Scala 中使用泛型?

How to use generic in Scala from circe?

我想使用自动通用编组器到 Json 来自圈子:

def printTest[T<: Product](resourse: ResourcePartTest[T]): Unit = {
    import io.circe.generic.auto._
    import io.circe.syntax._

    println(resourse.asJson)
  }

但我可以例外:

Error:(29, 22) could not find implicit value for parameter encoder: io.circe.Encoder[com.moex.regulatory.standards.intermediate.v23.ResourcePartTest[T]]
    println(resourse.asJson)

Error:(29, 22) not enough arguments for method asJson: (implicit encoder: io.circe.Encoder[com.moex.regulatory.standards.intermediate.v23.ResourcePartTest[T]])io.circe.Json.
Unspecified value parameter encoder.
    println(resourse.asJson)

我可以为 Generic 使用自动编组器吗?

我不确定 ResourceParTest 是如何定义的,但这应该可以通过将通用派生导入移到方法之外并需要 Encoder[ResourcePartTest[T]] 作为证据来实现:

import io.circe.Encoder
import io.circe.generic.auto._
import io.circe.syntax._

sealed trait ResourcePartTest[T]
case class Foo() extends ResourcePartTest[(Int, Int)]

def printTest[T <: Product](resourse:
                            ResourcePartTest[T])(implicit ev: Encoder[ResourcePartTest[T]]): Unit = {
  println(resourse.asJson)
}