Skip to content

Commit

Permalink
Merge pull request #82 from nefilim/master
Browse files Browse the repository at this point in the history
Add hinted deserializer support
  • Loading branch information
SandroGrzicic committed Jul 13, 2014
2 parents ea7261c + 6b269ac commit de76662
Showing 1 changed file with 14 additions and 0 deletions.
Expand Up @@ -543,11 +543,25 @@ class Generator protected (sourceName: String, importedSymbols: Map[String, Impo
// generated output
output.append(generatedOutput).append("\n")

val messageNames = tree.collect { case m:Message => m }.map(_.name)
// outer object
output
.append("object ").append(className).append(" {\n")
.append("\tdef registerAllExtensions(registry: com.google.protobuf.ExtensionRegistryLite) {\n")
.append("\t}\n\n")

.append("\tprivate val fromBinaryHintMap = collection.immutable.HashMap[String, Array[Byte] ⇒ com.google.protobuf.GeneratedMessageLite](").append("\n")
.append(messageNames.map { m => "\t\t" + s""" "$m" -> (bytes ⇒ $m.parseFrom(bytes))""" } mkString(",\n"))
.append("\n\t)").append("\n")

.append("\n")
.append("\tdef deserializePayload(payload: Array[Byte], payloadType: String): com.google.protobuf.GeneratedMessageLite = {").append("\n")
.append("\t\tfromBinaryHintMap.get(payloadType) match {").append("\n")
.append("\t\t\tcase Some(f) ⇒ f(payload)").append("\n")
.append("\t\t\tcase None ⇒ throw new IllegalArgumentException(s\"unimplemented deserialization of message payload of type [${payloadType}]\")").append("\n")
.append("\t\t}").append("\n")
.append("\t}").append("\n")

.append("}\n")

ScalaClass(output.mkString, packageName.replace('.', File.separatorChar) + File.separatorChar, className)
Expand Down

0 comments on commit de76662

Please sign in to comment.