diff --git a/protoc-gen/src/main/scala/protocgen/CodeGenResponse.scala b/protoc-gen/src/main/scala/protocgen/CodeGenResponse.scala index 3d38fa1..31d536a 100644 --- a/protoc-gen/src/main/scala/protocgen/CodeGenResponse.scala +++ b/protoc-gen/src/main/scala/protocgen/CodeGenResponse.scala @@ -1,15 +1,40 @@ package protocgen +import com.google.protobuf.UnknownFieldSet import com.google.protobuf.compiler.PluginProtos.CodeGeneratorResponse import scala.collection.JavaConverters._ sealed trait CodeGenResponse { def toCodeGeneratorResponse: CodeGeneratorResponse = this match { - case CodeGenResponse.Internal.Success(files, features) => + case value: CodeGenResponse.Internal.Success => val b = CodeGeneratorResponse.newBuilder() - b.addAllFile(files.asJava) - b.setSupportedFeatures(features.map(_.getNumber()).sum) + b.addAllFile(value.files.asJava) + b.setSupportedFeatures(value.supportedFeatures.map(_.getNumber()).sum) + b.setUnknownFields( + // https://github.com/protocolbuffers/protobuf/blob/1f60d67437d7f57700/src/google/protobuf/compiler/plugin.proto#L105-L115 + UnknownFieldSet + .newBuilder() + .addField( + 3, + UnknownFieldSet.Field + .newBuilder() + .addVarint( + value.minimumEdition + ) + .build() + ) + .addField( + 4, + UnknownFieldSet.Field + .newBuilder() + .addVarint( + value.maximumEdition + ) + .build() + ) + .build() + ) b.build() case CodeGenResponse.Internal.Failure(msg) => val b = CodeGeneratorResponse.newBuilder() @@ -20,13 +45,21 @@ sealed trait CodeGenResponse { object CodeGenResponse { def succeed(files: Seq[CodeGeneratorResponse.File]): CodeGenResponse = - Internal.Success(files, Set()) + Internal.Success(files, Set(), 0, 0) def succeed( files: Seq[CodeGeneratorResponse.File], supportedFeatures: Set[CodeGeneratorResponse.Feature] ): CodeGenResponse = - Internal.Success(files, supportedFeatures) + Internal.Success(files, supportedFeatures, 0, 0) + + def succeed( + files: Seq[CodeGeneratorResponse.File], + supportedFeatures: Set[CodeGeneratorResponse.Feature], + minimumEdition: Int, + maximumEdition: Int + ): CodeGenResponse = + Internal.Success(files, supportedFeatures, minimumEdition, maximumEdition) def fail(message: String): CodeGenResponse = Internal.Failure(message) @@ -34,8 +67,10 @@ object CodeGenResponse { final case class Failure(val message: String) extends CodeGenResponse final case class Success( - val files: Seq[CodeGeneratorResponse.File], - supportedFeatures: Set[CodeGeneratorResponse.Feature] + files: Seq[CodeGeneratorResponse.File], + supportedFeatures: Set[CodeGeneratorResponse.Feature], + minimumEdition: Int, + maximumEdition: Int ) extends CodeGenResponse } }