package response import ( "errors" "fmt" "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client" sdkstatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status" "github.com/valyala/fasthttp" "go.uber.org/zap" ) func Error(r *fasthttp.RequestCtx, msg string, code int) { r.Error(msg+"\n", code) } func FormErrorResponse(message string, err error) (int, string, []zap.Field) { var ( msg string statusCode int logFields []zap.Field ) st := new(sdkstatus.ObjectAccessDenied) switch { case errors.As(err, &st): statusCode = fasthttp.StatusForbidden reason := st.Reason() msg = fmt.Sprintf("%s: %v: %s", message, err, reason) logFields = append(logFields, zap.String("error_detail", reason)) case client.IsErrObjectNotFound(err) || client.IsErrContainerNotFound(err): statusCode = fasthttp.StatusNotFound msg = "NotFound" default: statusCode = fasthttp.StatusBadRequest msg = fmt.Sprintf("%s: %v", message, err) } return statusCode, msg, logFields }