in module/apmhttp/handler.go [177:228]
func WrapResponseWriter(w http.ResponseWriter) (http.ResponseWriter, *Response) {
rw := responseWriter{
ResponseWriter: w,
resp: Response{
Headers: w.Header(),
},
}
h, _ := w.(http.Hijacker)
p, _ := w.(http.Pusher)
rf, _ := w.(io.ReaderFrom)
switch {
case h != nil && p != nil:
rwhp := responseWriterHijackerPusher{
responseWriter: rw,
Hijacker: h,
Pusher: p,
}
if rf != nil {
rwhprf := responseWriterHijackerPusherReaderFrom{rwhp, rf}
return &rwhprf, &rwhprf.resp
}
return &rwhp, &rwhp.resp
case h != nil:
rwh := responseWriterHijacker{
responseWriter: rw,
Hijacker: h,
}
if rf != nil {
rwhrf := responseWriterHijackerReaderFrom{rwh, rf}
return &rwhrf, &rwhrf.resp
}
return &rwh, &rwh.resp
case p != nil:
rwp := responseWriterPusher{
responseWriter: rw,
Pusher: p,
}
if rf != nil {
rwprf := responseWriterPusherReaderFrom{rwp, rf}
return &rwprf, &rwprf.resp
}
return &rwp, &rwp.resp
default:
if rf != nil {
rwrf := responseWriterReaderFrom{rw, rf}
return &rwrf, &rwrf.resp
}
return &rw, &rw.resp
}
}