0

我正在研究图书馆zio-kafka,我想用zio-jsonJSON 格式反序列化消息的值。

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

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从 a 开始:Serde.string

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

这是对的吗?还有其他(更好的)方法吗?

4

1 回答 1

1

考虑使用.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

于 2021-07-31T19:03:50.793 回答