Мы используем sbt, scala, Avro, Kafka, avro4s & avro-hugger sbt plugin, который вызывается во время компиляции для генерации scala классов case из .avs c определений типов файлов Avro. 1002 * Конкретный топи Kafka c имеет тип Avro, выраженный как объединение двух других типов: просто сообщения имеют тип T1 или T2 (например, два типа событий).
Я пытаюсь реализовать Serde ( Сериализатор плюс десериализатор) для Either [T1, T2].
При попытке реализовать что-то вроде:
def serializer(): Serializer[Either[TariffUpserted, TariffCancelled]] =
(topic: String, data: Either[TariffUpserted, TariffCancelled]) => {
data match {
case Left(tariffUpserted) =>
implicitly[Serde[TariffUpserted]]
.serializer()
.serialize(topic, tariffUpserted)
case Right(contractCancelled) =>
implicitly[Serde[TariffCancelled]]
.serializer()
.serialize(topic, contractCancelled)
}
}
Я понял, что стандарт Avro должен указывать какой-то заголовок, где он записывается, какой тип (T1 или T2) является типом, для которого закодирована остальная полезная нагрузка.
Как я могу это реализовать?