Skip to content

Commit fa15b80

Browse files
authored
fix: implement io.ReaderFrom in wrapped response (compat with other middlewares) (#17)
1 parent e3b9add commit fa15b80

1 file changed

Lines changed: 13 additions & 0 deletions

File tree

dump.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ type WrapResponseWriter interface {
2424
var _ http.ResponseWriter = (*bodyWriter)(nil)
2525
var _ http.Flusher = (*bodyWriter)(nil)
2626
var _ http.Hijacker = (*bodyWriter)(nil)
27+
var _ io.ReaderFrom = (*bodyWriter)(nil)
2728

2829
type bodyWriter struct {
2930
http.ResponseWriter
@@ -71,6 +72,18 @@ func (w *bodyWriter) Hijack() (net.Conn, *bufio.ReadWriter, error) {
7172
return nil, nil, errors.New("Hijack not supported")
7273
}
7374

75+
// implements io.ReaderFrom
76+
func (w *bodyWriter) ReadFrom(r io.Reader) (int64, error) {
77+
if w.body == nil {
78+
if rf, ok := w.ResponseWriter.(io.ReaderFrom); ok {
79+
n, err := rf.ReadFrom(r)
80+
w.bytes += int(n)
81+
return n, err
82+
}
83+
}
84+
return io.Copy(w, r)
85+
}
86+
7487
// Unwrap implements the ability to use underlying http.ResponseController
7588
func (w *bodyWriter) Unwrap() http.ResponseWriter {
7689
return w.ResponseWriter

0 commit comments

Comments
 (0)