package status import ( "google.golang.org/grpc/codes" "net/http" ) const ( ClientClosed = 499 ) type Converter interface { ToGRPCCode(code int) codes.Code FromGRPCCode(code codes.Code) int } var DefaultConverter Converter = statusConverter{} type statusConverter struct { } func (s statusConverter) 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 (s statusConverter) 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 ToGRPCCode(code int) codes.Code { return DefaultConverter.ToGRPCCode(code) } func FromGRPCCode(code codes.Code) int { return DefaultConverter.FromGRPCCode(code) }