From 70ba7a2af26c591806884b17ec924eb7a9c22997 Mon Sep 17 00:00:00 2001 From: Brice Jaglin Date: Mon, 15 Feb 2021 08:20:58 +0100 Subject: [PATCH] move scalapb-validation sbt instructions to scripted --- docs/src/main/paradox/apidesign.md | 10 +------ .../10-scalapb-validate/build.sbt | 13 +++++++++ .../10-scalapb-validate/project/plugins.sbt | 3 ++ .../src/main/protobuf/helloworld.proto | 29 +++++++++++++++++++ .../myapp/helloworld/GreeterServiceImpl.scala | 19 ++++++++++++ .../gen-scala-server/10-scalapb-validate/test | 1 + 6 files changed, 66 insertions(+), 9 deletions(-) create mode 100644 sbt-plugin/src/sbt-test/gen-scala-server/10-scalapb-validate/build.sbt create mode 100644 sbt-plugin/src/sbt-test/gen-scala-server/10-scalapb-validate/project/plugins.sbt create mode 100644 sbt-plugin/src/sbt-test/gen-scala-server/10-scalapb-validate/src/main/protobuf/helloworld.proto create mode 100644 sbt-plugin/src/sbt-test/gen-scala-server/10-scalapb-validate/src/main/scala/example/myapp/helloworld/GreeterServiceImpl.scala create mode 100644 sbt-plugin/src/sbt-test/gen-scala-server/10-scalapb-validate/test diff --git a/docs/src/main/paradox/apidesign.md b/docs/src/main/paradox/apidesign.md index 4285082d2..4e326bfea 100644 --- a/docs/src/main/paradox/apidesign.md +++ b/docs/src/main/paradox/apidesign.md @@ -51,15 +51,7 @@ Follow the [documentation](https://scalapb.github.io/docs/validation) to update in order to generate the validators using `sbt-protoc` (@ref[used by Akka gRPC](buildtools/sbt.md#sbt-protoc-settings)). With the default parameters and target set by Akka gRPC, additions to your `build.sbt` should be: -```scala -import scalapb.GeneratorOption._ - -libraryDependencies += - "com.thesamet.scalapb" %% "scalapb-validate-core" % scalapb.validate.compiler.BuildInfo.version % "protobuf" - -Compile / PB.targets += - scalapb.validate.gen(FlatPackage) -> (Compile / akkaGrpcCodeGeneratorSettings / target).value -``` +@@snip[build.sbt](/sbt-plugin/src/sbt-test/gen-scala-server/10-scalapb-validate/build.sbt) { #setup } The `validate_at_construction` option can be particularly interesting in a server-side context since method implementations will automatically receive pre-validated requests and will not diff --git a/sbt-plugin/src/sbt-test/gen-scala-server/10-scalapb-validate/build.sbt b/sbt-plugin/src/sbt-test/gen-scala-server/10-scalapb-validate/build.sbt new file mode 100644 index 000000000..d828c098d --- /dev/null +++ b/sbt-plugin/src/sbt-test/gen-scala-server/10-scalapb-validate/build.sbt @@ -0,0 +1,13 @@ +resolvers += Resolver.sonatypeRepo("staging") +resolvers += Resolver.bintrayRepo("akka", "snapshots") + +//#setup +import scalapb.GeneratorOption._ + +enablePlugins(AkkaGrpcPlugin) + +libraryDependencies += + "com.thesamet.scalapb" %% "scalapb-validate-core" % scalapb.validate.compiler.BuildInfo.version % "protobuf" +Compile / PB.targets += + scalapb.validate.gen(FlatPackage) -> (Compile / akkaGrpcCodeGeneratorSettings / target).value +//#setup diff --git a/sbt-plugin/src/sbt-test/gen-scala-server/10-scalapb-validate/project/plugins.sbt b/sbt-plugin/src/sbt-test/gen-scala-server/10-scalapb-validate/project/plugins.sbt new file mode 100644 index 000000000..626ff848f --- /dev/null +++ b/sbt-plugin/src/sbt-test/gen-scala-server/10-scalapb-validate/project/plugins.sbt @@ -0,0 +1,3 @@ +addSbtPlugin("com.lightbend.akka.grpc" % "sbt-akka-grpc" % sys.props("project.version")) + +libraryDependencies ++= Seq("com.thesamet.scalapb" %% "scalapb-validate-codegen" % "0.2.1") diff --git a/sbt-plugin/src/sbt-test/gen-scala-server/10-scalapb-validate/src/main/protobuf/helloworld.proto b/sbt-plugin/src/sbt-test/gen-scala-server/10-scalapb-validate/src/main/protobuf/helloworld.proto new file mode 100644 index 000000000..06dc63e96 --- /dev/null +++ b/sbt-plugin/src/sbt-test/gen-scala-server/10-scalapb-validate/src/main/protobuf/helloworld.proto @@ -0,0 +1,29 @@ +syntax = "proto3"; + +option java_package = "example.myapp.helloworld.grpc"; + +package helloworld; + +import "validate/validate.proto"; + +// The greeting service definition. +service GreeterService { + // Sends a greeting + rpc SayHello (HelloRequest) returns (HelloReply) {} + + rpc ItKeepsTalking (stream HelloRequest) returns (HelloReply) {} + + rpc ItKeepsReplying (HelloRequest) returns (stream HelloReply) {} + + rpc StreamHellos (stream HelloRequest) returns (stream HelloReply) {} +} + +// The request message containing the user's name. +message HelloRequest { + string name = 1 [(validate.rules).string.min_len = 3];; +} + +// The response message containing the greetings +message HelloReply { + string message = 1; +} diff --git a/sbt-plugin/src/sbt-test/gen-scala-server/10-scalapb-validate/src/main/scala/example/myapp/helloworld/GreeterServiceImpl.scala b/sbt-plugin/src/sbt-test/gen-scala-server/10-scalapb-validate/src/main/scala/example/myapp/helloworld/GreeterServiceImpl.scala new file mode 100644 index 000000000..4efdcb425 --- /dev/null +++ b/sbt-plugin/src/sbt-test/gen-scala-server/10-scalapb-validate/src/main/scala/example/myapp/helloworld/GreeterServiceImpl.scala @@ -0,0 +1,19 @@ +package example.myapp.helloworld + +import scala.concurrent.Future + +import akka.NotUsed +import akka.stream.scaladsl.Source + +import example.myapp.helloworld.grpc._ + +class GreeterServiceImpl extends GreeterService { + override def sayHello(in: HelloRequest): Future[HelloReply] = ??? + + override def streamHellos(in: Source[HelloRequest, NotUsed]): Source[HelloReply, NotUsed] = ??? + + override def itKeepsTalking(in: Source[HelloRequest, NotUsed]): Future[HelloReply] = ??? + + override def itKeepsReplying(in: HelloRequest): Source[HelloReply, NotUsed] = ??? + +} diff --git a/sbt-plugin/src/sbt-test/gen-scala-server/10-scalapb-validate/test b/sbt-plugin/src/sbt-test/gen-scala-server/10-scalapb-validate/test new file mode 100644 index 000000000..5df2af1f3 --- /dev/null +++ b/sbt-plugin/src/sbt-test/gen-scala-server/10-scalapb-validate/test @@ -0,0 +1 @@ +> compile