scala
import io.circe._
import io.circe.syntax._
case class User(name: String, age: Int)
implicit val userEncoder: Encoder[User] = Encoder.forProduct2("name", "age")(u => (u.name, u.age))
implicit val userDecoder: Decoder[User] = Decoder.forProduct2("name", "age")(User.apply)
val user = User("John Doe", 30)
val json = user.asJson
println(json.spaces2)
val decodedUser = json.as[User]
println(decodedUser)