Skip to content

Instantly share code, notes, and snippets.

@emaxerrno
Created May 23, 2013 21:41
Show Gist options
  • Select an option

  • Save emaxerrno/5639653 to your computer and use it in GitHub Desktop.

Select an option

Save emaxerrno/5639653 to your computer and use it in GitHub Desktop.
package com.yieldmo.storm.scheme
import backtype.storm.spout.Scheme
import backtype.storm.tuple.Fields
import com.google.protobuf._
import collection.JavaConversions._
class ProtoScheme[T <: Message: ClassManifest](emittedField: String) extends Scheme {
val serialVersionUID = 1L;
@transient lazy val builder =
classManifest[T].erasure.getMethods.find(_.getName == "newBuilder").map(m => m.invoke(m.getDefaultValue).asInstanceOf[Message.Builder]).get
override def deserialize(bytes: Array[Byte]) = asJavaList(List[Object](builder.mergeFrom(bytes).build()))
override def getOutputFields: Fields = new Fields(emittedField)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment