scala - Enumeration自动推导找不到Encoder

标签 scala enums circe

我有一个这样的案例类:

case class Admin(name: String, role: Role)

Role 是枚举

object Role extends Enumeration {
  type Role = Value
  val Manager = Value
}

当我尝试:

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

val response = Admin("John", Role.Manager).asJson.noSpaces

我收到隐式编码器未找到错误。

not enough arguments for method asJson: (implicit encoder: io.circe.Encoder[Admin])io.circe.Json. Unspecified value parameter encoder.

我想这个错误是由于枚举,所以我改为:

trait Role

object Role {
  object Manager extends Role
}

但这也行不通。

最后,我尝试了:

trait Role

object Manager extends Role

并没有成功。有谁可以帮助我吗?谢谢!

最佳答案

enumeratum-circe启用以下语法

object CirceEnumeratumExample extends App {
  import enumeratum._
  import io.circe.generic.auto._, io.circe.syntax._

  sealed trait Role extends EnumEntry
  case object Role extends Enum[Role] with CirceEnum[Role] {
    case object Manager  extends Role
    case object User extends Role
    val values = findValues
  }

  case class Admin(name: String, role: Role)
  val response = Admin("John", Role.Manager).asJson.noSpaces
  println(response)
}

哪些输出

{"name":"John","role":"Manager"}

在哪里

libraryDependencies += "com.beachape" %% "enumeratum" % "1.5.13",
libraryDependencies += "com.beachape" %% "enumeratum-circe" % "1.5.21"

关于scala - Enumeration自动推导找不到Encoder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57031030/

相关文章:

regex - Scala RegexParsers 中的非贪婪匹配

scala - 我如何告诉 sbt 使用 Scala 2.12 或 2.13 的夜间版本?

Swift - 枚举的关联值或扩展

scala - Circe 找不到隐式编码器

scala - 如何在 Circe 中将 null 解码为空字符串

scala - 为什么 Set 是一个函数?

go - 强制函数只接受类型,而不是类型的底层类型

c - 枚举数据类型

Json-circe 无法为密封特性的子类型派生编码器

scala - 阅读 Parquet 时是否有可能保持列顺序?