gzipreader.go 709 B

1234567891011121314151617181920212223242526272829303132333435
  1. package h2quic
  2. // copied from net/transport.go
  3. // gzipReader wraps a response body so it can lazily
  4. // call gzip.NewReader on the first call to Read
  5. import (
  6. "compress/gzip"
  7. "io"
  8. )
  9. // call gzip.NewReader on the first call to Read
  10. type gzipReader struct {
  11. body io.ReadCloser // underlying Response.Body
  12. zr *gzip.Reader // lazily-initialized gzip reader
  13. zerr error // sticky error
  14. }
  15. func (gz *gzipReader) Read(p []byte) (n int, err error) {
  16. if gz.zerr != nil {
  17. return 0, gz.zerr
  18. }
  19. if gz.zr == nil {
  20. gz.zr, err = gzip.NewReader(gz.body)
  21. if err != nil {
  22. gz.zerr = err
  23. return 0, err
  24. }
  25. }
  26. return gz.zr.Read(p)
  27. }
  28. func (gz *gzipReader) Close() error {
  29. return gz.body.Close()
  30. }