azkustodata/internal/response/response.go (45 lines of code) (raw):

package response import ( "compress/flate" "compress/gzip" "fmt" "io" "net/http" "strings" "github.com/Azure/azure-kusto-go/azkustodata/errors" ) type originalCloser struct { original io.ReadCloser wrapper io.ReadCloser } func (o *originalCloser) Read(p []byte) (n int, err error) { return o.wrapper.Read(p) } func (o *originalCloser) Close() error { if err := o.wrapper.Close(); err != nil { return err } return o.original.Close() } func TranslateBody(resp *http.Response, op errors.Op) (io.ReadCloser, error) { body := resp.Body var wrapper io.ReadCloser switch enc := strings.ToLower(resp.Header.Get("Content-Encoding")); enc { case "": return body, nil case "gzip": var err error wrapper, err = gzip.NewReader(resp.Body) if err != nil { return nil, errors.E(op, errors.KInternal, fmt.Errorf("gzip reader error: %w", err)) } case "deflate": wrapper = flate.NewReader(resp.Body) default: return nil, errors.ES(op, errors.KInternal, "Content-Encoding was unrecognized: %s", enc) } return &originalCloser{ original: body, wrapper: wrapper, }, nil }