diff options
| author | Adnan Maolood <[email protected]> | 2021-02-23 20:49:42 -0500 |
|---|---|---|
| committer | Adnan Maolood <[email protected]> | 2021-02-23 20:49:55 -0500 |
| commit | e8d98ef4ec9dd9b6fd4f0a67c4ef531485354bee (patch) | |
| tree | 0d4afa0e2df65848ecb5f7652928d107db716dec /response.go | |
| parent | Make ResponseWriter a struct (diff) | |
| download | go-gemini-e8d98ef4ec9dd9b6fd4f0a67c4ef531485354bee.tar.xz go-gemini-e8d98ef4ec9dd9b6fd4f0a67c4ef531485354bee.zip | |
Move I/O utilities to io.go
Diffstat (limited to 'response.go')
| -rw-r--r-- | response.go | 39 |
1 files changed, 1 insertions, 38 deletions
diff --git a/response.go b/response.go index 8c7febc..abbc757 100644 --- a/response.go +++ b/response.go @@ -81,7 +81,7 @@ func ReadResponse(rc io.ReadCloser) (*Response, error) { } if resp.Status.Class() == StatusSuccess { - resp.body = newReadCloserBody(br, rc) + resp.body = newBufReadCloser(br, rc) } else { resp.body = nopReadCloser{} rc.Close() @@ -89,43 +89,6 @@ func ReadResponse(rc io.ReadCloser) (*Response, error) { return resp, nil } -type nopReadCloser struct{} - -func (nopReadCloser) Read(p []byte) (int, error) { - return 0, io.EOF -} - -func (nopReadCloser) Close() error { - return nil -} - -type readCloserBody struct { - br *bufio.Reader // used until empty - io.ReadCloser -} - -func newReadCloserBody(br *bufio.Reader, rc io.ReadCloser) io.ReadCloser { - body := &readCloserBody{ReadCloser: rc} - if br.Buffered() != 0 { - body.br = br - } - return body -} - -func (b *readCloserBody) Read(p []byte) (n int, err error) { - if b.br != nil { - if n := b.br.Buffered(); len(p) > n { - p = p[:n] - } - n, err = b.br.Read(p) - if b.br.Buffered() == 0 { - b.br = nil - } - return n, err - } - return b.ReadCloser.Read(p) -} - // Read reads data from the response body. // The response body is streamed on demand as Read is called. func (r *Response) Read(p []byte) (n int, err error) { |