@@ -21,6 +21,7 @@ type ProxyResponseWriter struct {
2121 headers http.Header
2222 body bytes.Buffer
2323 status int
24+ observers []chan <- bool
2425}
2526
2627// NewProxyResponseWriter returns a new ProxyResponseWriter object.
@@ -30,10 +31,25 @@ func NewProxyResponseWriter() *ProxyResponseWriter {
3031 return & ProxyResponseWriter {
3132 headers : make (http.Header ),
3233 status : defaultStatusCode ,
34+ observers : make ([]chan <- bool , 0 ),
3335 }
3436
3537}
3638
39+ func (r * ProxyResponseWriter ) CloseNotify () <- chan bool {
40+ ch := make (chan bool )
41+
42+ r .observers = append (r .observers , ch )
43+
44+ return ch
45+ }
46+
47+ func (r * ProxyResponseWriter ) notifyClosed () {
48+ for _ , v := range r .observers {
49+ v <- true
50+ }
51+ }
52+
3753// Header implementation from the http.ResponseWriter interface.
3854func (r * ProxyResponseWriter ) Header () http.Header {
3955 return r .headers
@@ -69,6 +85,8 @@ func (r *ProxyResponseWriter) WriteHeader(status int) {
6985// Returns a populated proxy response object. If the response is invalid, for example
7086// has no headers or an invalid status code returns an error.
7187func (r * ProxyResponseWriter ) GetProxyResponse () (events.APIGatewayProxyResponse , error ) {
88+ r .notifyClosed ()
89+
7290 if r .status == defaultStatusCode {
7391 return events.APIGatewayProxyResponse {}, errors .New ("Status code not set on response" )
7492 }
0 commit comments