Как де / сериализовать тип суммы / объединения Avro? - PullRequest
0 голосов
/ 06 августа 2020

Мы используем 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) является типом, для которого закодирована остальная полезная нагрузка.

Как я могу это реализовать?

...