Files
paralus/components/common/pkg/gateway/error.go
2021-12-28 14:23:52 +05:30

30 lines
750 B
Go

package gateway
import (
"context"
"net/http"
"github.com/grpc-ecosystem/grpc-gateway/runtime"
"github.com/segmentio/encoding/json"
"google.golang.org/grpc"
)
type errorBody struct {
Err string `json:"error,omitempty"`
}
// customErrorHandler implements custom grpc error handler
func customErrorHandler(ctx context.Context, _ *runtime.ServeMux, marshaler runtime.Marshaler, w http.ResponseWriter, _ *http.Request, err error) {
const fallback = `{"error": "failed to marshal error message"}`
w.Header().Set("Content-type", marshaler.ContentType())
w.WriteHeader(runtime.HTTPStatusFromCode(grpc.Code(err)))
jErr := json.NewEncoder(w).Encode(errorBody{
Err: grpc.ErrorDesc(err),
})
if jErr != nil {
w.Write([]byte(fallback))
}
}