【问题标题】:Integrating Zio-Kafka Consumers with Zio-Json deserializer将 Zio-Kafka 消费者与 Zio-Json 反序列化器集成
【发布时间】:2021-10-06 07:29:55
【问题描述】:

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

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

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)
}

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

【问题讨论】:

    标签: json scala apache-kafka zio zio-streams


    【解决方案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 类。

    【讨论】:

    • 天哪!你说得对。我修复了我的问题中的代码 :) 那么,除了“任何一种”类型映射之外,还有什么问题吗?
    • 好吧,也许我们会得到一个 ZIO 灰胡子来权衡一个更优雅的解决方案,但否则我认为这很好。
    • 我认为它们不存在 ;)
    猜你喜欢
    • 2021-10-11
    • 2019-08-30
    • 2021-07-21
    • 2017-03-06
    • 2018-12-08
    • 1970-01-01
    • 1970-01-01
    • 2019-04-29
    • 2019-05-11
    相关资源
    最近更新 更多