code: func NewWrapResponseWriter(w http.ResponseWriter, protoMajor int) WrapResponseWriter {
  	_, fl := w.(http.Flusher)
  
  	bw := basicWriter{ResponseWriter: w}
  
  	if protoMajor == 2 {
  		_, ps := w.(http.Pusher)
  		if fl && ps {
  			return &http2FancyWriter{bw}
  		}
  	} else {
  		_, hj := w.(http.Hijacker)
  		_, rf := w.(io.ReaderFrom)
  		if fl && hj && rf {
  			return &httpFancyWriter{bw}
  		}
  	}
  	if fl {
  		return &flushWriter{bw}
  	}
  
  	return &bw
  }
docs: // NewWrapResponseWriter wraps an http.ResponseWriter, returning a proxy that allows you to
  // hook into various parts of the response process.