mirror of
https://github.com/rls-moe/nyx
synced 2024-11-16 22:12:24 +00:00
35 lines
666 B
Go
35 lines
666 B
Go
|
// +build go1.7,!go1.8
|
||
|
|
||
|
package middleware
|
||
|
|
||
|
import (
|
||
|
"io"
|
||
|
"net/http"
|
||
|
)
|
||
|
|
||
|
// NewWrapResponseWriter wraps an http.ResponseWriter, returning a proxy that allows you to
|
||
|
// hook into various parts of the response process.
|
||
|
func NewWrapResponseWriter(w http.ResponseWriter, protoMajor int) WrapResponseWriter {
|
||
|
_, cn := w.(http.CloseNotifier)
|
||
|
_, fl := w.(http.Flusher)
|
||
|
|
||
|
bw := basicWriter{ResponseWriter: w}
|
||
|
|
||
|
if protoMajor == 2 {
|
||
|
if cn && fl {
|
||
|
return &http2FancyWriter{bw}
|
||
|
}
|
||
|
} else {
|
||
|
_, hj := w.(http.Hijacker)
|
||
|
_, rf := w.(io.ReaderFrom)
|
||
|
if cn && fl && hj && rf {
|
||
|
return &httpFancyWriter{bw}
|
||
|
}
|
||
|
}
|
||
|
if fl {
|
||
|
return &flushWriter{bw}
|
||
|
}
|
||
|
|
||
|
return &bw
|
||
|
}
|