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 ...