SuperMacho
SuperMacho

Reputation: 97

How to use generic in Scala from circe?

I want to use automatic generic marshaller to Json from circle:

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

    println(resourse.asJson)
  }

But I can Exeption:

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)

Can I use automatic marshaller for Generic?

Upvotes: 2

Views: 324

Answers (1)

Yuval Itzchakov
Yuval Itzchakov

Reputation: 149628

I'm not sure how ResourceParTest is defined, but this should work by moving the generic derivation import outside the method and requiring an Encoder[ResourcePartTest[T]] as evidence:

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)
}

Upvotes: 2

Related Questions