From ffb0a2f8968db13c62452e3ebd35a6ceec0e1d80 Mon Sep 17 00:00:00 2001 From: Arsen Date: Thu, 12 Aug 2021 14:15:49 +0300 Subject: [PATCH] grpc client: fix grpc code to micro http status conversion for the fallback case with empty Details (#2206) --- plugins/client/grpc/error.go | 38 ++++++++++++++++++++++++++++++------ 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/plugins/client/grpc/error.go b/plugins/client/grpc/error.go index ee5b23c8..f87725bc 100644 --- a/plugins/client/grpc/error.go +++ b/plugins/client/grpc/error.go @@ -2,7 +2,9 @@ package grpc import ( "github.com/asim/go-micro/v3/errors" + "google.golang.org/grpc/codes" "google.golang.org/grpc/status" + "net/http" ) func microError(err error) error { @@ -33,10 +35,34 @@ func microError(err error) error { } // fallback - return &errors.Error{ - Id: "go.micro.client", - Code: int32(s.Code()), - Detail: s.Message(), - Status: s.Code().String(), - } + return errors.New("go.micro.client", s.Message(), microStatusFromGrpcCode(s.Code())) } + +func microStatusFromGrpcCode(code codes.Code) int32 { + switch code { + case codes.OK: + return http.StatusOK + case codes.InvalidArgument: + return http.StatusBadRequest + case codes.DeadlineExceeded: + return http.StatusRequestTimeout + case codes.NotFound: + return http.StatusNotFound + case codes.AlreadyExists: + return http.StatusConflict + case codes.PermissionDenied: + return http.StatusForbidden + case codes.Unauthenticated: + return http.StatusUnauthorized + case codes.FailedPrecondition: + return http.StatusPreconditionFailed + case codes.Unimplemented: + return http.StatusNotImplemented + case codes.Internal: + return http.StatusInternalServerError + case codes.Unavailable: + return http.StatusServiceUnavailable + } + + return http.StatusInternalServerError +} \ No newline at end of file