如何在 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)
}
我想使用自动通用编组器到 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)
}