31 lines
578 B
Go
31 lines
578 B
Go
package server
|
|
|
|
import (
|
|
"log"
|
|
"net/http"
|
|
"strings"
|
|
|
|
"github.com/mailru/easyjson"
|
|
)
|
|
|
|
func writeJSON(w http.ResponseWriter, r *http.Request, data easyjson.Marshaler) {
|
|
json, err := easyjson.Marshal(data)
|
|
if err != nil {
|
|
log.Println(err)
|
|
fail(w, http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
w.Header().Set("Content-Type", "application/json")
|
|
|
|
if len(json) > 1400 && strings.Contains(r.Header.Get("Accept-Encoding"), "gzip") {
|
|
w.Header().Set("Content-Encoding", "gzip")
|
|
|
|
gzw := getGzipWriter(w)
|
|
gzw.Write(json)
|
|
putGzipWriter(gzw)
|
|
} else {
|
|
w.Write(json)
|
|
}
|
|
}
|