All Downloads are FREE. Search and download functionalities are using the official Maven repository.

protocgen.CodeGenRequest.scala Maven / Gradle / Ivy

The newest version!
package protocgen

import scala.collection.JavaConverters._

import com.google.protobuf.Descriptors.FileDescriptor
import com.google.protobuf.compiler.PluginProtos
import com.google.protobuf.compiler.PluginProtos.CodeGeneratorRequest
import com.google.protobuf.DescriptorProtos.FileDescriptorProto

case class CodeGenRequest(
    parameter: String,
    filesToGenerate: Seq[FileDescriptor],
    allProtos: Seq[FileDescriptor],
    compilerVersion: Option[PluginProtos.Version],
    asProto: CodeGeneratorRequest
)

object CodeGenRequest {
  def apply(req: CodeGeneratorRequest) = {
    val filesMap = fileDescriptorsByName(
      req.getProtoFileList().asScala.toVector
    )
    new CodeGenRequest(
      parameter = req.getParameter(),
      filesToGenerate =
        req.getFileToGenerateList().asScala.toVector.map(filesMap),
      allProtos = filesMap.values.toVector,
      compilerVersion =
        if (req.hasCompilerVersion()) Some(req.getCompilerVersion()) else None,
      req
    )
  }

  def fileDescriptorsByName(
      fileProtos: Seq[FileDescriptorProto]
  ): Map[String, FileDescriptor] =
    fileProtos.foldLeft[Map[String, FileDescriptor]](Map.empty) {
      case (acc, fp) =>
        val deps = fp.getDependencyList.asScala.map(acc)
        acc + (fp.getName -> FileDescriptor.buildFrom(fp, deps.toArray))
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy