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

Kotlin implementation

Open mfickett opened this issue 5 years ago • 0 comments

Kotlin gRPC exposes a different server endpoint API from Java. It would be useful to have an example of throwing a StatusException, if that's what the Kotlin generated code expects users to do.

With this in build.gradle:

plugins {
    id "com.google.protobuf" version "0.8.12"
}
protobuf {
    protoc { artifact = "com.google.protobuf:protoc:3.12.2" }
    plugins {
        grpc { artifact = "io.grpc:protoc-gen-grpc-java:1.29.0" }
        grpckt { artifact = "io.grpc:protoc-gen-grpc-kotlin:0.1.2" }
    }
    generateProtoTasks {
        all()*.plugins {
            grpc {}
            grpckt {}
        }
    }
}

The generated RPC functions to override are like this:

/**                                                                                                  
 * Holder for Kotlin coroutine-based client and server APIs for                                      
 * my_pkg.MyService.                                               
 */                                                                                                  
object MyServiceGrpcKt {
    ...

    /**
     * Returns the response to an RPC for valohealth_monocle.model_search.ModelSearchService.Search.
     *
     * If this method fails with a [StatusException], the RPC will fail with the corresponding      
     * [io.grpc.Status].  If this method fails with a [java.util.concurrent.CancellationException], 
     * the RPC will fail
     * with status `Status.CANCELLED`.  If this method fails for any other reason, the RPC will     
     * fail with `Status.UNKNOWN` with the exception as a cause.
     *
     * @param request The request from the client.
     */
    open suspend fun search(request: ModelSearchRequest): ModelSearchResponse = throw
        StatusException(UNIMPLEMENTED.withDescription("Method my_pkg.MyService.Search is unimplemented"))
}

So unlike Java, there's no observer to tag errors onto, but the default implementation here seems to give an example of throwing an error.

mfickett avatar Oct 02 '20 18:10 mfickett