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

时间:2017-11-13 13:51:12

标签: scala circe

我想从圈子中使用自动通用marshaller到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使用自动编组器吗?

1 个答案:

答案 0 :(得分:1)

我不确定如何定义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)
}