package util import ( "compress/gzip" "encoding/json" "net/http" "strings" ) func Json(fn func(http.ResponseWriter, *http.Request) Return) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // w.Header().Set("Content-Type", "application/json") // if r.Method == "OPTIONS" { // WriteResponse(w, http.StatusOK, "Ok", "Ok") // return // } var rt interface{} var enc *json.Encoder if !strings.Contains(r.Header.Get("Accept-Encoding"), "gzip") { rt = fn(w, r) enc = json.NewEncoder(w) } else { w.Header().Set("Content-Encoding", "gzip") gz := gzip.NewWriter(w) defer gz.Close() rt = fn(w, r) enc = json.NewEncoder(gz) } // Encode result if err := enc.Encode(&rt); nil != err { WriteResponse(w, http.StatusBadRequest, "Error", err.Error()) } }) }