scala 如何在Zio-JSON中为Enumeratum枚举获取简单的字符串编码

ncecgwcz  于 2023-06-06  发布在  Scala
关注(0)|答案(1)|浏览(172)

假设我有一个简单的基于枚举的枚举。

import enumeratum._

  sealed trait Fruit extends EnumEntry

  object Fruit extends Enum[Fruit] {
    override val values: IndexedSeq[Fruit] = findValues
    case object Avocado extends Fruit
    case object Banana  extends Fruit
    case object Tomato  extends Fruit
  }

使用zio-json,我希望它在JSON中编码和解码如下:

someObject: {
  ...
  fruit: "Banana"
  ...
}

什么是简单而干净的方法来做到这一点?

1l5u6lss

1l5u6lss1#

指定一个zio-json编解码器,如下所示:

implicit val fruitCodec: JsonCodec[Fruit] = JsonCodec[Fruit](
    JsonEncoder[String].contramap[Fruit](_.entryName),
    JsonDecoder[String].mapOrFail(name => Fruit.withNameEither(name).left.map(error => error.getMessage)),
  )

我是从zio-json issue的这篇评论中得到这个想法的。

相关问题