You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
2.3 KiB
97 lines
2.3 KiB
2 years ago
|
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)
|
||
|
}
|