fs2-grpc icon indicating copy to clipboard operation
fs2-grpc copied to clipboard

Support generating code from proto in src/test/protobuf

Open lacarvalho91 opened this issue 2 years ago • 2 comments

We have proto files in src/test/protobuf which doesn't seem to be supported out of the box. To get it to work I've had to copy paste some settings from https://github.com/typelevel/fs2-grpc/blob/90fe82c78470f74ea49981701ff8dfb736792412/plugin/src/main/scala/fs2/grpc/codegen/Fs2GrpcPlugin.scala#L103.

inConfig(Test)(
  Seq(
    PB.targets := Fs2GrpcPlugin.autoImport.scalapbCodeGenerators.value,
    PB.protoSources := Seq(sourceDirectory.value / "protobuf"),
    fs2GrpcServiceSuffix := "Fs2Grpc",
    fs2GrpcOutputPath := sourceManaged.value / "fs2-grpc",
    scalapbCodeGeneratorOptions := Seq(CodeGeneratorOption.Grpc, CodeGeneratorOption.Fs2Grpc),
    scalapbCodeGenerators := {
      val options = scalapbCodeGeneratorOptions.value.toSet
      Target(
        scalapb.gen(
          flatPackage = options(CodeGeneratorOption.FlatPackage),
          javaConversions = options(CodeGeneratorOption.JavaConversions),
          grpc = options(CodeGeneratorOption.Grpc),
          singleLineToProtoString = options(CodeGeneratorOption.SingleLineToProtoString),
          asciiFormatToString = options(CodeGeneratorOption.AsciiFormatToString)
        ),
        sourceManaged.value / "scalapb"
      ) ::
        Option(
          Target(
            (
              SandboxedJvmGenerator.forModule(
                "scala-fs2-grpc",
                Artifact(
                  BuildInfo.organization,
                  s"${BuildInfo.codeGeneratorName}_${CrossVersion.binaryScalaVersion(BuildInfo.scalaVersion)}",
                  BuildInfo.version
                ),
                BuildInfo.codeGeneratorFullName + "$",
                Nil
              ),
              scalapbCodeGeneratorOptions.value.filterNot(_ == CodeGeneratorOption.Fs2Grpc).map(_.toString) :+
                s"serviceSuffix=${fs2GrpcServiceSuffix.value}"
            ),
            fs2GrpcOutputPath.value
          )
        ).filter(_ => scalapbCodeGeneratorOptions.value.contains(CodeGeneratorOption.Fs2Grpc)).toList
    }
  )
)

It would be good if we supported this out of the box like Akka gRPC does here.

lacarvalho91 avatar Jun 15 '23 10:06 lacarvalho91

I had to revert your PR that I merged as the changes are breaking the build of downstream projects. I need to look into it.

ahjohannessen avatar Jun 16 '23 12:06 ahjohannessen

Got a link to those builds? I couldn't really work out how to confidently test the changes so maybe those builds will give me some inspiration

lacarvalho91 avatar Jun 16 '23 15:06 lacarvalho91