42 lines
1.5 KiB
Go
42 lines
1.5 KiB
Go
package paymentapiimp
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"github.com/tech/sendico/pkg/api/http/response"
|
|
"github.com/tech/sendico/pkg/mlogger"
|
|
"github.com/tech/sendico/pkg/mservice"
|
|
"google.golang.org/grpc/codes"
|
|
"google.golang.org/grpc/status"
|
|
)
|
|
|
|
func grpcErrorResponse(logger mlogger.Logger, source mservice.Type, err error) http.HandlerFunc {
|
|
statusErr, ok := status.FromError(err)
|
|
if !ok {
|
|
return response.Internal(logger, source, err)
|
|
}
|
|
|
|
switch statusErr.Code() {
|
|
case codes.InvalidArgument:
|
|
return response.BadRequest(logger, source, "invalid_argument", statusErr.Message())
|
|
case codes.NotFound:
|
|
return response.NotFound(logger, source, statusErr.Message())
|
|
case codes.PermissionDenied:
|
|
return response.AccessDenied(logger, source, statusErr.Message())
|
|
case codes.Unauthenticated:
|
|
return response.Unauthorized(logger, source, statusErr.Message())
|
|
case codes.AlreadyExists, codes.Aborted:
|
|
return response.DataConflict(logger, source, statusErr.Message())
|
|
case codes.Unimplemented:
|
|
return response.NotImplemented(logger, source, statusErr.Message())
|
|
case codes.FailedPrecondition:
|
|
return response.Error(logger, source, http.StatusPreconditionFailed, "failed_precondition", statusErr.Message())
|
|
case codes.DeadlineExceeded:
|
|
return response.Error(logger, source, http.StatusGatewayTimeout, "deadline_exceeded", statusErr.Message())
|
|
case codes.Unavailable:
|
|
return response.Error(logger, source, http.StatusServiceUnavailable, "service_unavailable", statusErr.Message())
|
|
default:
|
|
return response.Internal(logger, source, err)
|
|
}
|
|
}
|