package middleware import ( "encoding/json" "net/http" "github.com/charmbracelet/log" ) func WriteJsonOrError[K any](logger *log.Logger, object K, w http.ResponseWriter) { jsonObject, err := json.Marshal(object) if err != nil { logger.Warn("could not marshal json object", "err", err) w.WriteHeader(http.StatusBadRequest) return } w.Write(jsonObject) w.WriteHeader(http.StatusOK) } type ErrorObject struct { Error string `json:"error"` } func writeError(logger *log.Logger, error string, w http.ResponseWriter, code int) { e := ErrorObject{ error, } jsonObject, err := json.Marshal(e) if err != nil { logger.Warn("could not marshal json object", "err", err) w.WriteHeader(http.StatusBadRequest) return } w.Write(jsonObject) w.WriteHeader(code) } func WriteErrorBadRequest(logger *log.Logger, error string, w http.ResponseWriter) { writeError(logger, error, w, http.StatusBadRequest) } func WriteErrorInternal(logger *log.Logger, error string, w http.ResponseWriter) { writeError(logger, error, w, http.StatusInternalServerError) }