Как получить простую строковую кодировку для перечисления 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 .