diff --git a/core/api/util/writeHTTP.go b/core/api/util/writeHTTP.go index 1c5792b2..130d57a9 100644 --- a/core/api/util/writeHTTP.go +++ b/core/api/util/writeHTTP.go @@ -12,6 +12,7 @@ package util import ( + "encoding/json" "fmt" "net/http" @@ -124,3 +125,27 @@ func WriteSuccessEmptyJSON(w http.ResponseWriter) { _, err := w.Write([]byte("{}")) log.IfErr(err) } + +func WriteMarshalError(w http.ResponseWriter, err error) { + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(http.StatusBadRequest) + _, err2 := w.Write([]byte("{Error: 'JSON marshal failed'}")) + log.IfErr(err2) + log.Error("Failed to JSON marshal", err) +} + +// WriteJSON serializes data as JSON to HTTP response. +func WriteJSON(w http.ResponseWriter, v interface{}) { + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(http.StatusOK) + + j, err := json.Marshal(v) + + if err != nil { + WriteMarshalError(w, err) + return + } + + _, err = w.Write(j) + log.IfErr(err) +}