Skip to content

Commit

Permalink
adding some extra options for types
Browse files Browse the repository at this point in the history
Signed-off-by: Jeff Plaisance <jeffplaisance@gmail.com>
  • Loading branch information
jeffplaisance committed Aug 9, 2010
1 parent a6ee1af commit c3db6c7
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 8 deletions.
Binary file modified lib/scala-protobuf_2.8.0-0.1.jar
Binary file not shown.
9 changes: 9 additions & 0 deletions src/main/scala/protobuf/Message.scala
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,15 @@ trait Message {
def javaMessage:com.google.protobuf.Message
}

trait TypedMessage[A <: com.google.protobuf.Message] extends Message {
override def javaMessage:A
}

trait MessageBuilder {
def set(i:Int, fieldValue:Option[Any]):Unit
def build:Message
}

trait TypedMessageBuilder[A <: TypedMessage[B], B <: com.google.protobuf.Message] extends MessageBuilder {
override def build:A
}
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,8 @@ object ScalaProtoWrapperGenerator {
val options = fileDescriptor.getOptions
val javaClass = options.getJavaOuterClassname
out.println("import "+options.getJavaPackage+"."+javaClass)
out.println("import protobuf.Message")
out.println("import protobuf.MessageBuilder")
out.println("import protobuf.TypedMessage")
out.println("import protobuf.TypedMessageBuilder")
out.println("import collection.mutable.ListBuffer")
out.println("import java.io.{InputStream, OutputStream}")
out.println("import collection.JavaConversions")
Expand Down Expand Up @@ -84,13 +84,14 @@ object ScalaProtoWrapperGenerator {
val repeatedFieldListBuffers = repeatedFields.zip(repeatedFieldTypes.unzip._1).map(x => "val "+x._1.getName+":ListBuffer["+x._2+"] = new ListBuffer["+x._2+"]")

val name = descriptor.getName
val javaSubClass = javaClass+"."+name

out.print("class "+name+"(")
val spaces = " "*(name.length+7)
out.println((constructorFields++optionalFieldVals++repeatedFieldLists).mkString(",\n"+spaces))
out.println(" ) extends Message {")
out.println(" def javaMessage:"+javaClass+"."+name+" = {")
out.println(" val builder = "+javaClass+"."+name+".newBuilder")
out.println(" ) extends TypedMessage["+javaSubClass+"] {")
out.println(" def javaMessage:"+javaSubClass+" = {")
out.println(" val builder = "+javaSubClass+".newBuilder")
for ((field, isMessage) <- requiredFields.zip(requiredFieldTypes.unzip._2)) {
val fieldName = field.getName
out.println(" builder.set"+upcaseFirstLetter(fieldName)+"("+fieldName+(if(isMessage)".javaMessage" else "")+")")
Expand Down Expand Up @@ -123,11 +124,11 @@ object ScalaProtoWrapperGenerator {
out.println("object "+name+" {")
out.println
out.println(" def parse(inputStream:InputStream):"+name+" = {")
out.println(" val message = "+javaClass+"."+name+".parseDelimitedFrom(inputStream)")
out.println(" val message = "+javaSubClass+".parseDelimitedFrom(inputStream)")
out.println(" javaToScala(message)")
out.println(" }")
out.println
out.println(" def javaToScala(message:"+javaClass+"."+name+"):"+name+" = {")
out.println(" def javaToScala(message:"+javaSubClass+"):"+name+" = {")
val requiredGetters = new ListBuffer[String]
for ((field, (typeName, isMessage)) <- requiredFields.zip(requiredFieldTypes)) {
val fieldName = field.getName
Expand All @@ -152,7 +153,7 @@ object ScalaProtoWrapperGenerator {

out.print("class "+name+"Builder(")
out.print(constructorFields.mkString(","))
out.println(") extends MessageBuilder {")
out.println(") extends TypedMessageBuilder["+name+", "+javaSubClass+"] {")
for (field <- optionalFieldVars) {
out.println(" "+field)
}
Expand Down

0 comments on commit c3db6c7

Please sign in to comment.