12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- package errcode
- import (
- "net/http"
- "google.golang.org/grpc/codes"
- "google.golang.org/grpc/status"
- )
- // CodeFromGrpcError converts the gRPC error to an HTTP status code.
- // See: https://github.com/googleapis/googleapis/blob/master/google/rpc/code.proto
- func CodeFromGrpcError(err error) int {
- code := status.Code(err)
- switch code {
- case codes.OK:
- return http.StatusOK
- case codes.InvalidArgument, codes.FailedPrecondition, codes.OutOfRange:
- return http.StatusBadRequest
- case codes.Unauthenticated:
- return http.StatusUnauthorized
- case codes.PermissionDenied:
- return http.StatusForbidden
- case codes.NotFound:
- return http.StatusNotFound
- case codes.Canceled:
- return http.StatusRequestTimeout
- case codes.AlreadyExists, codes.Aborted:
- return http.StatusConflict
- case codes.ResourceExhausted:
- return http.StatusTooManyRequests
- case codes.Internal, codes.DataLoss, codes.Unknown:
- return http.StatusInternalServerError
- case codes.Unimplemented:
- return http.StatusNotImplemented
- case codes.Unavailable:
- return http.StatusServiceUnavailable
- case codes.DeadlineExceeded:
- return http.StatusGatewayTimeout
- }
- return http.StatusInternalServerError
- }
- // IsGrpcError checks if the error is a gRPC error.
- func IsGrpcError(err error) bool {
- if err == nil {
- return false
- }
- _, ok := err.(interface {
- GRPCStatus() *status.Status
- })
- return ok
- }
|