also accpt text/tsv

main
bel 2024-04-13 09:52:53 -06:00
parent e58fa50656
commit 1324376399
1 changed files with 15 additions and 3 deletions

18
main.go
View File

@ -249,6 +249,9 @@ func encodeResponse(w http.ResponseWriter, r *http.Request, v interface{}) error
if strings.Contains(r.Header.Get("Accept"), "text/csv") {
return encodeCSVResponse(w, v)
}
if strings.Contains(r.Header.Get("Accept"), "text/tsv") {
return encodeTSVResponse(w, v)
}
return encodeJSONResponse(w, v)
}
@ -256,7 +259,15 @@ func encodeJSONResponse(w http.ResponseWriter, v interface{}) error {
return json.NewEncoder(w).Encode(v)
}
func encodeTSVResponse(w http.ResponseWriter, v interface{}) error {
return encodeSVResponse(w, v, "\t")
}
func encodeCSVResponse(w http.ResponseWriter, v interface{}) error {
return encodeSVResponse(w, v, ",")
}
func encodeSVResponse(w http.ResponseWriter, v interface{}, delim string) error {
b, err := json.Marshal(v)
if err != nil {
return err
@ -282,17 +293,18 @@ func encodeCSVResponse(w http.ResponseWriter, v interface{}) error {
}
sort.Strings(fields)
w.Write([]byte(strings.Join(fields, ",")))
w.Write([]byte(strings.Join(fields, delim)))
w.Write([]byte("\n"))
for _, object := range objects {
w.Write([]byte("\n"))
for j, field := range fields {
json.Unmarshal([]byte(field), &field)
if j > 0 {
w.Write([]byte(","))
w.Write([]byte(delim))
}
w.Write(object[field])
}
w.Write([]byte("\n"))
}
return nil