1
0
mirror of https://github.com/kataras/iris.git synced 2026-01-04 10:47:20 +00:00

examples: use ctx.ResponseWriter().Naive().(http.Pusher) instead

Former-commit-id: 7802f4eadf2b1c0a0d2a42ed5ebac3e5c77f88cc
This commit is contained in:
Gerasimos (Makis) Maropoulos
2020-07-24 22:36:46 +03:00
parent a4efb222cc
commit 2f8b29cb3d
6 changed files with 18 additions and 82 deletions

View File

@@ -184,10 +184,6 @@ type CompressResponseWriter struct {
CompressWriter
ResponseWriter
http.Pusher
http.Hijacker
http.CloseNotifier
Disabled bool
Encoding string
Level int
@@ -234,26 +230,6 @@ func AcquireCompressResponseWriter(w ResponseWriter, r *http.Request, level int)
v.CompressWriter = encWriter
AddCompressHeaders(w.Header(), encoding)
pusher, ok := w.(http.Pusher)
if !ok {
pusher = nil // make sure interface value is nil.
}
hijacker, ok := w.(http.Hijacker)
if !ok {
hijacker = nil
}
closeNotifier, ok := w.(http.CloseNotifier)
if !ok {
closeNotifier = nil
}
v.Pusher = pusher
v.Hijacker = hijacker
v.CloseNotifier = closeNotifier
return v, nil
}

View File

@@ -33,9 +33,6 @@ func releaseResponseRecorder(w *ResponseRecorder) {
type ResponseRecorder struct {
ResponseWriter
http.Hijacker
http.CloseNotifier
// keep track of the body in order to be
// resetable and useful inside custom transactions
chunks []byte
@@ -55,20 +52,6 @@ func (w *ResponseRecorder) Naive() http.ResponseWriter {
// prepares itself, the response recorder, to record and send response to the client.
func (w *ResponseRecorder) BeginRecord(underline ResponseWriter) {
w.ResponseWriter = underline
hijacker, ok := underline.(http.Hijacker)
if !ok {
hijacker = nil
}
closeNotifier, ok := underline.(http.CloseNotifier)
if !ok {
closeNotifier = nil
}
w.Hijacker = hijacker
w.CloseNotifier = closeNotifier
w.headers = underline.Header()
w.ResetBody()
}
@@ -282,7 +265,7 @@ var ErrPushNotSupported = errors.New("push feature is not supported by this Resp
func (w *ResponseRecorder) Push(target string, opts *http.PushOptions) (err error) {
w.FlushResponse()
if pusher, ok := w.ResponseWriter.(http.Pusher); ok {
if pusher, ok := w.ResponseWriter.Naive().(http.Pusher); ok {
err = pusher.Push(target, opts)
if err != nil && err.Error() == http.ErrNotSupported.ErrorString {
return ErrPushNotSupported

View File

@@ -132,10 +132,6 @@ func releaseResponseWriter(w ResponseWriter) {
// it writes directly to the underline http.ResponseWriter
type responseWriter struct {
http.ResponseWriter
http.Pusher
http.Hijacker // Note:
// The http.CloseNotifier interface is deprecated. New code should use Request.Context instead.
http.CloseNotifier
statusCode int // the saved status code which will be used from the cache service
// statusCodeSent bool // reply header has been (logically) written | no needed any more as we have a variable to catch total len of written bytes
@@ -176,29 +172,6 @@ func (w *responseWriter) BeginResponse(underline http.ResponseWriter) {
// that this responseWriter should write on.
func (w *responseWriter) SetWriter(underline http.ResponseWriter) {
w.ResponseWriter = underline
pusher, ok := underline.(http.Pusher)
if !ok {
pusher = nil // make sure interface value is nil.
}
hijacker, ok := underline.(http.Hijacker)
if !ok {
hijacker = nil
}
// This interface is obselete by Go authors
// and we only capture it
// for compatible reasons. End-developers SHOULD replace
// the use of CloseNotifier with the: Request.Context().Done() channel.
closeNotifier, ok := underline.(http.CloseNotifier)
if !ok {
closeNotifier = nil
}
w.Pusher = pusher
w.Hijacker = hijacker
w.CloseNotifier = closeNotifier
}
// EndResponse is the last function which is called right before the server sent the final response.