diff --git a/main.go b/main.go index bf727f7..c3b6f35 100644 --- a/main.go +++ b/main.go @@ -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