2013-03-25 7 views
15

Um die Arbeit mit Avro in Scala zu erleichtern, möchte ich eine Fallklasse basierend auf dem mit einer .avro-Datei gespeicherten Schema definieren. Ich könnte versuchen:Kann ich eine Scala-Fallklassendefinition aus einer Avro-Schemadefinition erhalten?

  1. Schreiben einer .scala Fallklassendefinition von Hand.
  2. Programmatically Strings zu einer .scala Datei
  3. Spoof der Fall Klassendefinition mit einer Bytecode-Bibliothek wie ObjectWeb ASM
  4. SpecificCompiler Tricks zu schreiben?
  5. Ändern einer vorhandenen fallklassifizierten Definition zur Laufzeit?

Danke, jeder Rat wird geschätzt. -Julian

Antwort

14

Ich habe auf ein kleines Projekt namens Scalavro gehackt, um den anderen Weg zu gehen (Scala Typen zu Avro Schemas). Es gibt Ihnen auch direkte binäre I/O.

Einfaches Beispiel:

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

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

val personAvroType = AvroType[Person] 
personAvroType.schema 

, die ergibt:

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

Es gibt viele weitere Beispiele auf der Projektseite (oben verlinkten) und in den scalatest Spezifikationen.

Ich habe vor, die Binärdateien auf Sonatype OSS in naher Zukunft zu hosten, aber jetzt können Sie die Quelle von Github und sbt publish-local ziehen, wenn Sie es ausprobieren möchten.

Update:
Scalavro ist jetzt auf Maven Zentrale zur Verfügung.

+0

Sehr schön. Mach weiter so. Sie überlegen, ob Sie eine Compilation-Reflection-Version erstellen möchten? –

+0

Noch nicht, aber das wäre ein wirklich lustiges Projekt. Willst du helfen? –