Skip to content

Commit 99bcd99

Browse files
committed
We should support io.StringWriter
1 parent fec77c8 commit 99bcd99

File tree

1 file changed

+72
-33
lines changed

1 file changed

+72
-33
lines changed

nethttp/metrics-tracker.go

Lines changed: 72 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)