Documentation ¶
Overview ¶
Package prw provides PluggableResponseWriter, which is a ResponseWriter and Hijacker (for websockets) that provides reusability and resiliency, optimized for handler chains where multiple middlewares may want to modify the response. It also can Marshal/Unmarshal the core response parts (body, status, headers) for use with caching operations.
Index ¶
- type PluggableResponseWriter
- func (w *PluggableResponseWriter) AddFlushFunc(f func(http.ResponseWriter, *PluggableResponseWriter))
- func (w *PluggableResponseWriter) Close()
- func (w *PluggableResponseWriter) Code() int
- func (w *PluggableResponseWriter) Flush()
- func (w *PluggableResponseWriter) FlushTo(to http.ResponseWriter) (int, error)
- func (w *PluggableResponseWriter) FlushToIf(to http.ResponseWriter, first bool) (int, error)
- func (w *PluggableResponseWriter) Header() http.Header
- func (w *PluggableResponseWriter) Hijack() (net.Conn, *bufio.ReadWriter, error)
- func (w *PluggableResponseWriter) Length() int
- func (w *PluggableResponseWriter) MarshalBinary() ([]byte, error)
- func (w *PluggableResponseWriter) SetHeader(h http.Header)
- func (w *PluggableResponseWriter) SetHeadersToAdd(headers map[string]string)
- func (w *PluggableResponseWriter) SetHeadersToRemove(headers []string)
- func (w *PluggableResponseWriter) UnmarshalBinary(data []byte) error
- func (w *PluggableResponseWriter) Write(b []byte) (int, error)
- func (w *PluggableResponseWriter) WriteHeader(status int)
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type PluggableResponseWriter ¶
type PluggableResponseWriter struct { Body *recyclable.Buffer // contains filtered or unexported fields }
PluggableResponseWriter is a ResponseWriter that provides reusability and resiliency, optimized for handler chains where multiple middlewares may want to modify the response
func NewPluggableResponseWriter ¶
func NewPluggableResponseWriter() *PluggableResponseWriter
NewPluggableResponseWriter returns a pointer to an initialized PluggableResponseWriter
func NewPluggableResponseWriterFromOld ¶
func NewPluggableResponseWriterFromOld(rw http.ResponseWriter) *PluggableResponseWriter
NewPluggableResponseWriterFromOld returns a pointer to an initialized PluggableResponseWriter, with the original stored away for Flush()
func NewPluggableResponseWriterIfNot ¶
func NewPluggableResponseWriterIfNot(rw http.ResponseWriter) (*PluggableResponseWriter, bool)
NewPluggableResponseWriterIfNot returns a pointer to an initialized PluggableResponseWriter and true, if the provided ResponseWriter is not a PluggableResponseWriter, otherwise returns the provided ResponseWriter casted as a PluggableResponseWriter and false. This makes simple create-and-clean stanzas trivial.
Where "w" is the original ResponseWriter passed rw, firstRw := NewPluggableResponseWriterIfNot(w) defer rw.FlushToIf(w, firstRw)
func (*PluggableResponseWriter) AddFlushFunc ¶
func (w *PluggableResponseWriter) AddFlushFunc(f func(http.ResponseWriter, *PluggableResponseWriter))
AddFlushFunc adds a function to run if any of the Flush methods are called, to customize that activity
func (*PluggableResponseWriter) Close ¶
func (w *PluggableResponseWriter) Close()
Close should only be called if the PluggableResponseWriter will no longer be used.
func (*PluggableResponseWriter) Code ¶
func (w *PluggableResponseWriter) Code() int
Code returns the HTTP status code
func (*PluggableResponseWriter) Flush ¶
func (w *PluggableResponseWriter) Flush()
Flush satisfies http.Flusher. If NewPluggableResponseWriterFromOld or NewPluggableResponseWriterIfNot is used, then the first time Flush() is called, if the original ResponseWriter is an http.Flusher, all headers and the body thus far are written to it, and then Flush() is called on it too. **ALSO** further Write() calls are also written to the original. Subsequent calls to Flush will call Flush() on the original.
func (*PluggableResponseWriter) FlushTo ¶
func (w *PluggableResponseWriter) FlushTo(to http.ResponseWriter) (int, error)
FlushTo writes to the provided ResponseWriter with our headers, status code, and body. The PluggableResponseWriter should not be used after calling FlushToIf.
func (*PluggableResponseWriter) FlushToIf ¶
func (w *PluggableResponseWriter) FlushToIf(to http.ResponseWriter, first bool) (int, error)
FlushToIf takes a ResponseWriter and boolean, and calls FlushTo if the boolean is true. The PluggableResponseWriter should not be used after calling FlushToIf. This makes simple create-and-clean stanzas trivial.
Where "w" is the original ResponseWriter passed rw, firstRw := NewPluggableResponseWriterIfNot(w) defer rw.FlushToIf(w, firstRw)
func (*PluggableResponseWriter) Header ¶
func (w *PluggableResponseWriter) Header() http.Header
Header returns the current http.Header
func (*PluggableResponseWriter) Hijack ¶ added in v1.1.0
func (w *PluggableResponseWriter) Hijack() (net.Conn, *bufio.ReadWriter, error)
Hijack implements http.Hijacker
func (*PluggableResponseWriter) Length ¶
func (w *PluggableResponseWriter) Length() int
Length returns the byte length of the response body
func (*PluggableResponseWriter) MarshalBinary ¶ added in v1.2.0
func (w *PluggableResponseWriter) MarshalBinary() ([]byte, error)
MarshalBinary is used by encoding/gob to create a representation for encoding.
func (*PluggableResponseWriter) SetHeader ¶
func (w *PluggableResponseWriter) SetHeader(h http.Header)
SetHeader takes an http.Header to replace the current with
func (*PluggableResponseWriter) SetHeadersToAdd ¶
func (w *PluggableResponseWriter) SetHeadersToAdd(headers map[string]string)
SetHeadersToAdd sets a map of headers to add before flushing/writing headers to the response
func (*PluggableResponseWriter) SetHeadersToRemove ¶
func (w *PluggableResponseWriter) SetHeadersToRemove(headers []string)
SetHeadersToRemove sets a list of headers to remove before flushing/writing headers to the response
func (*PluggableResponseWriter) UnmarshalBinary ¶ added in v1.2.0
func (w *PluggableResponseWriter) UnmarshalBinary(data []byte) error
UnmarshalBinary is used by encoding/gob to reconstitute a previously-encoded instance.
func (*PluggableResponseWriter) Write ¶
func (w *PluggableResponseWriter) Write(b []byte) (int, error)
Write writes the data to the connection as part of an HTTP reply. Additionally, it sets the status if that hasn't been set yet, and determines the Content-Type if that hasn't been determined yet.
func (*PluggableResponseWriter) WriteHeader ¶
func (w *PluggableResponseWriter) WriteHeader(status int)
WriteHeader sends an HTTP response header with the provided status code.