package errcode import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/status" "net/http" ) const ( ClientClosed = 499 ) func ToGRPCCode(code int) codes.Code { switch code { case http.StatusOK: return codes.OK case http.StatusBadRequest: return codes.InvalidArgument case http.StatusUnauthorized: return codes.Unauthenticated case http.StatusForbidden: return codes.PermissionDenied case http.StatusNotFound: return codes.NotFound case http.StatusConflict: return codes.Aborted case http.StatusTooManyRequests: return codes.ResourceExhausted case http.StatusInternalServerError: return codes.Internal case http.StatusNotImplemented: return codes.Unimplemented case http.StatusServiceUnavailable: return codes.Unavailable case http.StatusGatewayTimeout: return codes.DeadlineExceeded case ClientClosed: return codes.Canceled } return codes.Unknown } func FromGRPCCode(code codes.Code) int { switch code { case codes.OK: return http.StatusOK case codes.Canceled: return ClientClosed case codes.Unknown: return http.StatusInternalServerError case codes.InvalidArgument: return http.StatusBadRequest case codes.DeadlineExceeded: return http.StatusGatewayTimeout 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.ResourceExhausted: return http.StatusTooManyRequests case codes.FailedPrecondition: return http.StatusBadRequest case codes.Aborted: return http.StatusConflict case codes.OutOfRange: return http.StatusBadRequest case codes.Unimplemented: return http.StatusNotImplemented case codes.Internal: return http.StatusInternalServerError case codes.Unavailable: return http.StatusServiceUnavailable case codes.DataLoss: return http.StatusInternalServerError } return http.StatusInternalServerError } func CodeFromGrpcError(err error) int { code := status.Code(err) return FromGRPCCode(code) } func IsGrpcError(err error) bool { if err == nil { return false } _, ok := err.(interface { GRPCStatus() *status.Status }) return ok }