@@ -24,6 +24,12 @@ func (w *metricsTracker) Write(b []byte) (int, error) {
2424 return size , err
2525}
2626
27+ func (w * metricsTracker ) WriteString (s []byte ) (int , error ) {
28+ size , err := io .WriteString (w .ResponseWriter , s )
29+ w .size += size
30+ return size , err
31+ }
32+
2733// wrappedResponseWriter returns a wrapped version of the original
2834// ResponseWriter and only implements the same combination of additional
2935// interfaces as the original. This implementation is based on
@@ -41,214 +47,247 @@ func (w *metricsTracker) wrappedResponseWriter() http.ResponseWriter {
4147 case ! i0 && ! i1 && ! i2 && ! i3 && ! i4 :
4248 return struct {
4349 http.ResponseWriter
44- }{w }
50+ io.StringWriter
51+ }{w , w }
4552 case ! i0 && ! i1 && ! i2 && ! i3 && i4 :
4653 return struct {
4754 http.ResponseWriter
55+ io.StringWriter
4856 io.ReaderFrom
49- }{w , rf }
57+ }{w , w , rf }
5058 case ! i0 && ! i1 && ! i2 && i3 && ! i4 :
5159 return struct {
5260 http.ResponseWriter
61+ io.StringWriter
5362 http.Flusher
54- }{w , fl }
63+ }{w , w , fl }
5564 case ! i0 && ! i1 && ! i2 && i3 && i4 :
5665 return struct {
5766 http.ResponseWriter
67+ io.StringWriter
5868 http.Flusher
5969 io.ReaderFrom
60- }{w , fl , rf }
70+ }{w , w , fl , rf }
6171 case ! i0 && ! i1 && i2 && ! i3 && ! i4 :
6272 return struct {
6373 http.ResponseWriter
74+ io.StringWriter
6475 http.Pusher
65- }{w , pu }
76+ }{w , w , pu }
6677 case ! i0 && ! i1 && i2 && ! i3 && i4 :
6778 return struct {
6879 http.ResponseWriter
80+ io.StringWriter
6981 http.Pusher
7082 io.ReaderFrom
71- }{w , pu , rf }
83+ }{w , w , pu , rf }
7284 case ! i0 && ! i1 && i2 && i3 && ! i4 :
7385 return struct {
7486 http.ResponseWriter
87+ io.StringWriter
7588 http.Pusher
7689 http.Flusher
77- }{w , pu , fl }
90+ }{w , w , pu , fl }
7891 case ! i0 && ! i1 && i2 && i3 && i4 :
7992 return struct {
8093 http.ResponseWriter
94+ io.StringWriter
8195 http.Pusher
8296 http.Flusher
8397 io.ReaderFrom
84- }{w , pu , fl , rf }
98+ }{w , w , pu , fl , rf }
8599 case ! i0 && i1 && ! i2 && ! i3 && ! i4 :
86100 return struct {
87101 http.ResponseWriter
102+ io.StringWriter
88103 http.CloseNotifier
89- }{w , cn }
104+ }{w , w , cn }
90105 case ! i0 && i1 && ! i2 && ! i3 && i4 :
91106 return struct {
92107 http.ResponseWriter
108+ io.StringWriter
93109 http.CloseNotifier
94110 io.ReaderFrom
95- }{w , cn , rf }
111+ }{w , w , cn , rf }
96112 case ! i0 && i1 && ! i2 && i3 && ! i4 :
97113 return struct {
98114 http.ResponseWriter
115+ io.StringWriter
99116 http.CloseNotifier
100117 http.Flusher
101- }{w , cn , fl }
118+ }{w , w , cn , fl }
102119 case ! i0 && i1 && ! i2 && i3 && i4 :
103120 return struct {
104121 http.ResponseWriter
122+ io.StringWriter
105123 http.CloseNotifier
106124 http.Flusher
107125 io.ReaderFrom
108- }{w , cn , fl , rf }
126+ }{w , w , cn , fl , rf }
109127 case ! i0 && i1 && i2 && ! i3 && ! i4 :
110128 return struct {
111129 http.ResponseWriter
130+ io.StringWriter
112131 http.CloseNotifier
113132 http.Pusher
114- }{w , cn , pu }
133+ }{w , w , cn , pu }
115134 case ! i0 && i1 && i2 && ! i3 && i4 :
116135 return struct {
117136 http.ResponseWriter
137+ io.StringWriter
118138 http.CloseNotifier
119139 http.Pusher
120140 io.ReaderFrom
121- }{w , cn , pu , rf }
141+ }{w , w , cn , pu , rf }
122142 case ! i0 && i1 && i2 && i3 && ! i4 :
123143 return struct {
124144 http.ResponseWriter
145+ io.StringWriter
125146 http.CloseNotifier
126147 http.Pusher
127148 http.Flusher
128- }{w , cn , pu , fl }
149+ }{w , w , cn , pu , fl }
129150 case ! i0 && i1 && i2 && i3 && i4 :
130151 return struct {
131152 http.ResponseWriter
153+ io.StringWriter
132154 http.CloseNotifier
133155 http.Pusher
134156 http.Flusher
135157 io.ReaderFrom
136- }{w , cn , pu , fl , rf }
158+ }{w , w , cn , pu , fl , rf }
137159 case i0 && ! i1 && ! i2 && ! i3 && ! i4 :
138160 return struct {
139161 http.ResponseWriter
162+ io.StringWriter
140163 http.Hijacker
141- }{w , hj }
164+ }{w , w , hj }
142165 case i0 && ! i1 && ! i2 && ! i3 && i4 :
143166 return struct {
144167 http.ResponseWriter
168+ io.StringWriter
145169 http.Hijacker
146170 io.ReaderFrom
147- }{w , hj , rf }
171+ }{w , w , hj , rf }
148172 case i0 && ! i1 && ! i2 && i3 && ! i4 :
149173 return struct {
150174 http.ResponseWriter
175+ io.StringWriter
151176 http.Hijacker
152177 http.Flusher
153- }{w , hj , fl }
178+ }{w , w , hj , fl }
154179 case i0 && ! i1 && ! i2 && i3 && i4 :
155180 return struct {
156181 http.ResponseWriter
182+ io.StringWriter
157183 http.Hijacker
158184 http.Flusher
159185 io.ReaderFrom
160- }{w , hj , fl , rf }
186+ }{w , w , hj , fl , rf }
161187 case i0 && ! i1 && i2 && ! i3 && ! i4 :
162188 return struct {
163189 http.ResponseWriter
190+ io.StringWriter
164191 http.Hijacker
165192 http.Pusher
166- }{w , hj , pu }
193+ }{w , w , hj , pu }
167194 case i0 && ! i1 && i2 && ! i3 && i4 :
168195 return struct {
169196 http.ResponseWriter
197+ io.StringWriter
170198 http.Hijacker
171199 http.Pusher
172200 io.ReaderFrom
173- }{w , hj , pu , rf }
201+ }{w , w , hj , pu , rf }
174202 case i0 && ! i1 && i2 && i3 && ! i4 :
175203 return struct {
176204 http.ResponseWriter
205+ io.StringWriter
177206 http.Hijacker
178207 http.Pusher
179208 http.Flusher
180- }{w , hj , pu , fl }
209+ }{w , w , hj , pu , fl }
181210 case i0 && ! i1 && i2 && i3 && i4 :
182211 return struct {
183212 http.ResponseWriter
213+ io.StringWriter
184214 http.Hijacker
185215 http.Pusher
186216 http.Flusher
187217 io.ReaderFrom
188- }{w , hj , pu , fl , rf }
218+ }{w , w , hj , pu , fl , rf }
189219 case i0 && i1 && ! i2 && ! i3 && ! i4 :
190220 return struct {
191221 http.ResponseWriter
222+ io.StringWriter
192223 http.Hijacker
193224 http.CloseNotifier
194- }{w , hj , cn }
225+ }{w , w , hj , cn }
195226 case i0 && i1 && ! i2 && ! i3 && i4 :
196227 return struct {
197228 http.ResponseWriter
229+ io.StringWriter
198230 http.Hijacker
199231 http.CloseNotifier
200232 io.ReaderFrom
201- }{w , hj , cn , rf }
233+ }{w , w , hj , cn , rf }
202234 case i0 && i1 && ! i2 && i3 && ! i4 :
203235 return struct {
204236 http.ResponseWriter
237+ io.StringWriter
205238 http.Hijacker
206239 http.CloseNotifier
207240 http.Flusher
208- }{w , hj , cn , fl }
241+ }{w , w , hj , cn , fl }
209242 case i0 && i1 && ! i2 && i3 && i4 :
210243 return struct {
211244 http.ResponseWriter
245+ io.StringWriter
212246 http.Hijacker
213247 http.CloseNotifier
214248 http.Flusher
215249 io.ReaderFrom
216- }{w , hj , cn , fl , rf }
250+ }{w , w , hj , cn , fl , rf }
217251 case i0 && i1 && i2 && ! i3 && ! i4 :
218252 return struct {
219253 http.ResponseWriter
254+ io.StringWriter
220255 http.Hijacker
221256 http.CloseNotifier
222257 http.Pusher
223- }{w , hj , cn , pu }
258+ }{w , w , hj , cn , pu }
224259 case i0 && i1 && i2 && ! i3 && i4 :
225260 return struct {
226261 http.ResponseWriter
262+ io.StringWriter
227263 http.Hijacker
228264 http.CloseNotifier
229265 http.Pusher
230266 io.ReaderFrom
231- }{w , hj , cn , pu , rf }
267+ }{w , w , hj , cn , pu , rf }
232268 case i0 && i1 && i2 && i3 && ! i4 :
233269 return struct {
234270 http.ResponseWriter
271+ io.StringWriter
235272 http.Hijacker
236273 http.CloseNotifier
237274 http.Pusher
238275 http.Flusher
239- }{w , hj , cn , pu , fl }
276+ }{w , w , hj , cn , pu , fl }
240277 case i0 && i1 && i2 && i3 && i4 :
241278 return struct {
242279 http.ResponseWriter
280+ io.StringWriter
243281 http.Hijacker
244282 http.CloseNotifier
245283 http.Pusher
246284 http.Flusher
247285 io.ReaderFrom
248- }{w , hj , cn , pu , fl , rf }
286+ }{w , w , hj , cn , pu , fl , rf }
249287 default :
250288 return struct {
251289 http.ResponseWriter
252- }{w }
290+ io.StringWriter
291+ }{w , w }
253292 }
254293}
0 commit comments