From 8fe5f107c76e3617bf4e9a04bf201419c458bc17 Mon Sep 17 00:00:00 2001 From: Ihor Vovk Date: Fri, 29 Nov 2024 08:56:44 +0100 Subject: [PATCH] Imply idempotent when safe is set. Emit options only when idempotency option is present. --- .../scalapb/compiler/GrpcServicePrinter.scala | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/compiler-plugin/src/main/scala/scalapb/compiler/GrpcServicePrinter.scala b/compiler-plugin/src/main/scala/scalapb/compiler/GrpcServicePrinter.scala index 09df4d06c..8fe1865d4 100644 --- a/compiler-plugin/src/main/scala/scalapb/compiler/GrpcServicePrinter.scala +++ b/compiler-plugin/src/main/scala/scalapb/compiler/GrpcServicePrinter.scala @@ -178,11 +178,11 @@ final class GrpcServicePrinter(service: ServiceDescriptor, implicits: Descriptor case StreamType.Bidirectional => "BIDI_STREAMING" } - val grpcMethodDescriptor = "_root_.io.grpc.MethodDescriptor" - val idempotencyLevel = method.getOptions.getIdempotencyLevel val safe = idempotencyLevel == IdempotencyLevel.NO_SIDE_EFFECTS - val idempotent = idempotencyLevel == IdempotencyLevel.IDEMPOTENT + val idempotent = idempotencyLevel == IdempotencyLevel.IDEMPOTENT || safe + + val grpcMethodDescriptor = "_root_.io.grpc.MethodDescriptor" p.add( s"""${method.deprecatedAnnotation}val ${method.grpcDescriptor.nameSymbol}: $grpcMethodDescriptor[${method.inputType.scalaType}, ${method.outputType.scalaType}] = @@ -190,14 +190,21 @@ final class GrpcServicePrinter(service: ServiceDescriptor, implicits: Descriptor | .setType($grpcMethodDescriptor.MethodType.$methodType) | .setFullMethodName($grpcMethodDescriptor.generateFullMethodName("${service.getFullName}", "${method.getName}")) | .setSampledToLocalTracing(true) - | .setSafe($safe) - | .setIdempotent($idempotent) | .setRequestMarshaller(${marshaller(method.inputType)}) | .setResponseMarshaller(${marshaller(method.outputType)}) | .setSchemaDescriptor(_root_.scalapb.grpc.ConcreteProtoMethodDescriptorSupplier.fromMethodDescriptor(${method.javaDescriptorSource})) - | .build() |""".stripMargin - ) + ).indent + .indent + .when(safe) { + _.add(".setSafe(true)") + } + .when(idempotent) { + _.add(".setIdempotent(true)") + } + .add(".build()") + .outdent + .outdent } private[this] def serviceDescriptor(service: ServiceDescriptor) = {