package nstatus import ( "git.noahlan.cn/noahlan/ntool-biz/core/nstatus/code" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" ) var table = map[codes.Code]int{ codes.OK: code.StatusOK, codes.Canceled: code.StatusRequestTimeout, codes.Unknown: code.StatusInternalServerError, codes.InvalidArgument: code.StatusBadRequest, codes.DeadlineExceeded: code.StatusGatewayTimeout, codes.NotFound: code.StatusNotFound, codes.AlreadyExists: code.StatusConflict, codes.PermissionDenied: code.StatusForbidden, codes.ResourceExhausted: code.StatusTooManyRequests, codes.FailedPrecondition: code.StatusBadRequest, codes.Aborted: code.StatusConflict, codes.OutOfRange: code.StatusBadRequest, codes.Unimplemented: code.StatusNotImplemented, codes.Internal: code.StatusInternalServerError, codes.Unavailable: code.StatusServiceUnavailable, codes.DataLoss: code.StatusInternalServerError, codes.Unauthenticated: code.StatusUnauthorized, } // WrapGrpcErr 将grpc-error转换为 Result func WrapGrpcErr(err error) *Result { gErr := status.Convert(err) if gErr == nil { return nil } if c, ok := table[gErr.Code()]; ok { return NewResult(c, gErr.Message()) } return NewResult(int(gErr.Code()), gErr.Message()) } // IsGrpcErr return an error if grpc status func IsGrpcErr(err error) bool { if err == nil { return false } _, ok := err.(interface { GRPCStatus() *status.Status }) return ok } func NewGrpcErr(code codes.Code, msg string) error { return NewResult(int(code), msg) } // NewGrpcInternalErr returns status error with Internal error code. func NewGrpcInternalErr(msg string) error { return NewGrpcErr(codes.Internal, msg) } // NewGrpcInvalidArgumentErr returns status error with InvalidArgument error code. func NewGrpcInvalidArgumentErr(msg string) error { return NewGrpcErr(codes.InvalidArgument, msg) } // NewGrpcNotFoundErr returns status error with NotFound error code. func NewGrpcNotFoundErr(msg string) error { return NewGrpcErr(codes.NotFound, msg) } // NewGrpcAlreadyExistsErr returns status error with AlreadyExists error code. func NewGrpcAlreadyExistsErr(msg string) error { return NewGrpcErr(codes.AlreadyExists, msg) } // NewGrpcUnauthenticatedErr returns status error with Unauthenticated error code. func NewGrpcUnauthenticatedErr(msg string) error { return NewGrpcErr(codes.Unauthenticated, msg) } // NewGrpcPermissionDeniedErr returns status error with PermissionDenied error code. func NewGrpcPermissionDeniedErr(msg string) error { return NewGrpcErr(codes.PermissionDenied, msg) }