Implement io.ReaderFrom on responseWriter

This interface is implemented on the standard net/http response object in order to unlock some optimizations around sendfile. In the same vein as the other optional interfaces, calling ReadFrom will result in a runtime panic if the underling http.ResponseWriter doesn't implement it.
This commit is contained in:
Alex Guerra 2016-06-08 17:06:55 -05:00
parent f931d1ea80
commit 9555743a47

View File

@ -22,6 +22,7 @@ type (
http.Hijacker
http.Flusher
http.CloseNotifier
io.ReaderFrom
// Returns the HTTP response status code of the current request.
Status() int
@ -114,3 +115,13 @@ func (w *responseWriter) CloseNotify() <-chan bool {
func (w *responseWriter) Flush() {
w.ResponseWriter.(http.Flusher).Flush()
}
// Implements the io.ReaderFrom interface
func (w *responseWriter) ReadFrom(r io.Reader) (n int64, err error) {
if w.size < 0 {
w.size = 0
}
n, err = w.ResponseWriter.(io.ReaderFrom).ReadFrom(r)
w.size += n
return
}