2013-03-25 14 views
15

Aby ułatwić pracę z Avro w Scali, chciałbym zdefiniować klasę case na podstawie schematu przechowywanego w pliku .avro. Mogę spróbować:Czy mogę uzyskać definicję klasy przypadku Scala z definicji schematu Avro?

  1. Ręczne pisanie definicji klasy .scala.
  2. Programowo pisania ciągi do pliku .scala
  3. Fałszywe sprawa definicji klasy z biblioteki kodu bajtowego jak ObjectWeb za ASM
  4. SpecificCompiler sztuczek?
  5. Modyfikowanie istniejącej definicji klasy klatek w czasie wykonywania?

Dzięki, każda rada jest doceniana. -Julian

Odpowiedz

14

Byłem włamania na niewielkim projektu o nazwie Scalavro iść w drugą stronę (typy Scala do Avro schematów). Daje również bezpośrednie binarne wejścia/wyjścia.

prosty przykład

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

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

val personAvroType = AvroType[Person] 
personAvroType.schema 

co daje:

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

Istnieje wiele przykładów, w miejscu projektu (połączone powyżej) oraz w scalatest specyfikacji.

mam plany do zorganizowania pliki binarne na Sonatype OSS w najbliższej przyszłości, ale teraz można wyciągnąć źródło, z github i sbt publish-local jeśli chcesz go wypróbować.

Aktualizacja:
Scalavro jest teraz dostępny na Maven Central.

+0

Very nice. Tak trzymaj. Zastanawiasz się nad tym, aby znaleźć miejsce, w którym znajduje się wersja do refleksji podczas kompilacji? –

+0

Jeszcze nie, ale byłby to naprawdę zabawny projekt. Chcesz pomóc? –