将 Zio-Kafka 消费者与 Zio-Json 反序列化器集成

Integrating Zio-Kafka Consumers with Zio-Json deserializer

我正在研究库 zio-kafka,我想使用 zio-json 以 JSON 格式反序列化消息的值。

我有一个简单的案例 class 及其解码器和编码器:

case class Player(name: String, score: Int)
object Player {
  implicit val decoder: JsonDecoder[Player] = DeriveJsonDecoder.gen[Player]
  implicit val encoder: JsonEncoder[Player] = DeriveJsonEncoder.gen[Player]
}

现在,我从使用上述解码器/编码器的 Serde.string 创建了一个 Serde

val playerSerde: Serde[Any, Player] = Serde.string.inmapM { playerAsString =>
  ZIO.fromEither(playerAsString.fromJson[Player].left.map(new RuntimeException(_)))
} { playerAsObj =>
  ZIO.effect(playerAsObj.toJson)
}

是否正确?还有其他(更好的)方法吗?

考虑使用 .getOrElse,因为我认为它使意图更清晰一些,并避免了对左侧字段的裸访问:

  val playerSerde: Serde[Any, Player] = Serde.string.inmapM { playerAsString =>
    ZIO.effectTotal(playerAsString.fromJson[Player].getOrElse(throw new Error))
  }(playerAsObj => ZIO.effect(playerAsObj.toJson))

我还假设你的意思是 .fromJson[Player],因为我在你的问题中没有看到 Match class。