Как получить простую строковую кодировку для перечисления Enumeratum в Zio-JSON

Допустим, у меня есть простое перечисление на основе перечисления.

        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"
  ...
}

Каков простой и чистый способ сделать это?

1 ответ

Укажите кодек 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 .

Другие вопросы по тегам