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