/
response_writer.go
54 lines (43 loc) · 1.07 KB
/
response_writer.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package router
import "net/http"
// ResponseWriter extends net/http ResponseWriter
type ResponseWriter interface {
Header() http.Header
Write([]byte) (int, error)
WriteHeader(statusCode int)
Written() ResponseWritten
}
// ResponseWritten is summary of written data
type ResponseWritten struct {
StatusCode int
BodyBytes int
}
type responseWriter struct {
inner http.ResponseWriter
written ResponseWritten
}
// NewResponseWriter wraps writer
func NewResponseWriter(w http.ResponseWriter) ResponseWriter {
return &responseWriter{
inner: w,
written: ResponseWritten{
StatusCode: 200, // default value of http.ResponseWriter
BodyBytes: 0,
},
}
}
func (w *responseWriter) Header() http.Header {
return w.inner.Header()
}
func (w *responseWriter) Write(body []byte) (int, error) {
bytes, err := w.inner.Write(body)
w.written.BodyBytes += bytes
return bytes, err
}
func (w *responseWriter) WriteHeader(statusCode int) {
w.inner.WriteHeader(statusCode)
w.written.StatusCode = statusCode
}
func (w *responseWriter) Written() ResponseWritten {
return w.written
}