Avro4s универсальный toByteArray / fromByteArray

У меня проблемы с универсальной версией функций toByteArray / fromByteArray для Avro4s

Я нашел эту сериализацию Avro с проблемой общего типа

это работает:

def fromByteArray[A: SchemaFor : FromRecord](bytes: Array[Byte]): Option[A] = {
    val in: ByteArrayInputStream = new ByteArrayInputStream(bytes)
    val input: AvroBinaryInputStream[A] = AvroInputStream.binary[A](in)
    val result: Option[A] = input.iterator.toSeq.headOption
    input.close()
    result
  }

но это не так!

def toByteArray[T : SchemaFor : FromRecord](obj: T): Array[Byte] = {
    val byteArrayStream = new ByteArrayOutputStream()
    val output = AvroOutputStream.binary[T](byteArrayStream)
    output.write(obj)
    output.close()
    byteArrayStream.toByteArray
  }

он генерирует исключение компиляции:

Ошибка:(48, 44) не удалось найти неявное значение для параметра доказательства типа com.sksamuel.avro4s.ToRecord[T] val output = AvroOutputStream.binaryT Ошибка:(48, 44) недостаточно аргументов для двоичного метода: (неявное подтверждение $23: com.sksamuel.avro4s.SchemaFor[T], неявное свидетельство $24: com.sksamuel.avro4s.ToRecord[T])com.sksamuel.avro4s.AvroBinaryOutputStream[T]. Не указано значение параметра свидетельства $24. val output = AvroOutputStream.binaryT

что я делаю не так?

тупая ошибка

def toByteArray[T : SchemaFor : FromRecord](obj: T): Array[Byte] ...

должно быть

def createByteArray[T : SchemaFor : ToRecord](obj: T): Array[Byte] ...

:D

проблема не решена

если одним из полей класса является AnyRef

val output = AvroOutputStream.binary[T](byteArrayStream)

не удалось скомпилировать с: не удалось найти неявное SchemaFor ...

0 ответов

Другие вопросы по тегам