diff options
author | Christopher Speller <crspeller@gmail.com> | 2018-04-16 05:37:14 -0700 |
---|---|---|
committer | Joram Wilander <jwawilander@gmail.com> | 2018-04-16 08:37:14 -0400 |
commit | 6e2cb00008cbf09e556b00f87603797fcaa47e09 (patch) | |
tree | 3c0eb55ff4226a3f024aad373140d1fb860a6404 /vendor/gopkg.in/olivere/elastic.v5/request.go | |
parent | bf24f51c4e1cc6286885460672f7f449e8c6f5ef (diff) | |
download | chat-6e2cb00008cbf09e556b00f87603797fcaa47e09.tar.gz chat-6e2cb00008cbf09e556b00f87603797fcaa47e09.tar.bz2 chat-6e2cb00008cbf09e556b00f87603797fcaa47e09.zip |
Depenancy upgrades and movign to dep. (#8630)
Diffstat (limited to 'vendor/gopkg.in/olivere/elastic.v5/request.go')
-rw-r--r-- | vendor/gopkg.in/olivere/elastic.v5/request.go | 53 |
1 files changed, 49 insertions, 4 deletions
diff --git a/vendor/gopkg.in/olivere/elastic.v5/request.go b/vendor/gopkg.in/olivere/elastic.v5/request.go index 87d191965..da5a7216e 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/request.go +++ b/vendor/gopkg.in/olivere/elastic.v5/request.go @@ -6,6 +6,7 @@ package elastic import ( "bytes" + "compress/gzip" "encoding/json" "io" "io/ioutil" @@ -34,13 +35,21 @@ func (r *Request) SetBasicAuth(username, password string) { ((*http.Request)(r)).SetBasicAuth(username, password) } -// SetBody encodes the body in the request. -func (r *Request) SetBody(body interface{}) error { +// SetBody encodes the body in the request. Optionally, it performs GZIP compression. +func (r *Request) SetBody(body interface{}, gzipCompress bool) error { switch b := body.(type) { case string: - return r.setBodyString(b) + if gzipCompress { + return r.setBodyGzip(b) + } else { + return r.setBodyString(b) + } default: - return r.setBodyJson(body) + if gzipCompress { + return r.setBodyGzip(body) + } else { + return r.setBodyJson(body) + } } } @@ -60,6 +69,42 @@ func (r *Request) setBodyString(body string) error { return r.setBodyReader(strings.NewReader(body)) } +// setBodyGzip gzip's the body. It accepts both strings and structs as body. +// The latter will be encoded via json.Marshal. +func (r *Request) setBodyGzip(body interface{}) error { + switch b := body.(type) { + case string: + buf := new(bytes.Buffer) + w := gzip.NewWriter(buf) + if _, err := w.Write([]byte(b)); err != nil { + return err + } + if err := w.Close(); err != nil { + return err + } + r.Header.Add("Content-Encoding", "gzip") + r.Header.Add("Vary", "Accept-Encoding") + return r.setBodyReader(bytes.NewReader(buf.Bytes())) + default: + data, err := json.Marshal(b) + if err != nil { + return err + } + buf := new(bytes.Buffer) + w := gzip.NewWriter(buf) + if _, err := w.Write(data); err != nil { + return err + } + if err := w.Close(); err != nil { + return err + } + r.Header.Add("Content-Encoding", "gzip") + r.Header.Add("Vary", "Accept-Encoding") + r.Header.Set("Content-Type", "application/json") + return r.setBodyReader(bytes.NewReader(buf.Bytes())) + } +} + // setBodyReader writes the body from an io.Reader. func (r *Request) setBodyReader(body io.Reader) error { rc, ok := body.(io.ReadCloser) |