-
Notifications
You must be signed in to change notification settings - Fork 0
/
json.go
62 lines (51 loc) · 1.63 KB
/
json.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
/*
Copyright 2023 EscherCloud.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package util
import (
"bytes"
"encoding/json"
"log"
"net/http"
)
type ErrorResponse struct {
Error string `json:"error"`
}
// JSON generates a web response in json
func JSON(w http.ResponseWriter, statusCode int, data interface{}) {
w.Header().Add("Content-Type", "application/json")
w.WriteHeader(statusCode)
// Encode the data into a JSON string
jsonData, err := json.Marshal(data)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
// Remove newline characters from the JSON string
// This is done because when using NewEncoder(w).Encode(data), it seems to drop a new line at the end which was breaking testing.
jsonData = bytes.ReplaceAll(jsonData, []byte("\n"), []byte(""))
// Write the modified JSON string to the response
_, err = w.Write(jsonData)
if err != nil {
log.Println(err)
}
}
// ERROR generates a response in json from an error
func ERROR(w http.ResponseWriter, statusCode int, err error) {
if err != nil {
JSON(w, statusCode, ErrorResponse{
Error: err.Error(),
})
return
}
JSON(w, http.StatusBadRequest, nil)
}