Могу ли я получить определение класса case Scala из определения схемы Avro?

Чтобы облегчить работу с Avro в Scala, я хотел бы определить класс case на основе схемы, хранящейся в файле .avro. Я мог бы попробовать:

  • Написание определения класса case.scala вручную.
  • Программная запись строк в файл .scala
  • Объясните определение класса case с помощью библиотеки байт-кода, например ObjectWeb ASM
  • Конкретные трюки компилятора?
  • Изменение существующего классификационного определения case во время выполнения?

Спасибо, любые советы приветствуются. -Julian

Ответы

Ответ 2

Я взломал небольшой проект под названием Scalavro, чтобы перейти в другую сторону (Scala типы к схемам Avro). Он также дает вам прямой двоичный ввод-вывод.

Простой пример:

package com.gensler.scalavro.tests
import com.gensler.scalavro.types.AvroType

case class Person(name: String, age: Int)

val personAvroType = AvroType[Person]
personAvroType.schema

который дает:

{
  "name": "Person",
  "type": "record",
  "fields": [
    {"name": "name", "type": "string"},
    {"name": "age", "type": "int"}
  ],
  "namespace": "com.gensler.scalavro.tests"
}

На сайте проекта есть много других примеров (см. выше) и в самых полных спецификациях.

В ближайшем будущем у меня есть планы по размещению двоичных файлов на Sonatype OSS, но пока вы можете вытащить источник из github и sbt publish-local, если вы хотите попробовать.

Update:
Scalaвро теперь доступен на Maven Central.