1 // Copyright 2017 The Prometheus Authors
2 // Licensed under the Apache License, Version 2.0 (the "License");
3 // you may not use this file except in compliance with the License.
4 // You may obtain a copy of the License at
6 // http://www.apache.org/licenses/LICENSE-2.0
8 // Unless required by applicable law or agreed to in writing, software
9 // distributed under the License is distributed on an "AS IS" BASIS,
10 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11 // See the License for the specific language governing permissions and
12 // limitations under the License.
23 type pusherDelegator struct{ *responseWriterDelegator }
25 func (d pusherDelegator) Push(target string, opts *http.PushOptions) error {
26 return d.ResponseWriter.(http.Pusher).Push(target, opts)
30 pickDelegator[pusher] = func(d *responseWriterDelegator) delegator { // 16
31 return pusherDelegator{d}
33 pickDelegator[pusher+closeNotifier] = func(d *responseWriterDelegator) delegator { // 17
35 *responseWriterDelegator
38 }{d, pusherDelegator{d}, closeNotifierDelegator{d}}
40 pickDelegator[pusher+flusher] = func(d *responseWriterDelegator) delegator { // 18
42 *responseWriterDelegator
45 }{d, pusherDelegator{d}, flusherDelegator{d}}
47 pickDelegator[pusher+flusher+closeNotifier] = func(d *responseWriterDelegator) delegator { // 19
49 *responseWriterDelegator
53 }{d, pusherDelegator{d}, flusherDelegator{d}, closeNotifierDelegator{d}}
55 pickDelegator[pusher+hijacker] = func(d *responseWriterDelegator) delegator { // 20
57 *responseWriterDelegator
60 }{d, pusherDelegator{d}, hijackerDelegator{d}}
62 pickDelegator[pusher+hijacker+closeNotifier] = func(d *responseWriterDelegator) delegator { // 21
64 *responseWriterDelegator
68 }{d, pusherDelegator{d}, hijackerDelegator{d}, closeNotifierDelegator{d}}
70 pickDelegator[pusher+hijacker+flusher] = func(d *responseWriterDelegator) delegator { // 22
72 *responseWriterDelegator
76 }{d, pusherDelegator{d}, hijackerDelegator{d}, flusherDelegator{d}}
78 pickDelegator[pusher+hijacker+flusher+closeNotifier] = func(d *responseWriterDelegator) delegator { //23
80 *responseWriterDelegator
85 }{d, pusherDelegator{d}, hijackerDelegator{d}, flusherDelegator{d}, closeNotifierDelegator{d}}
87 pickDelegator[pusher+readerFrom] = func(d *responseWriterDelegator) delegator { // 24
89 *responseWriterDelegator
92 }{d, pusherDelegator{d}, readerFromDelegator{d}}
94 pickDelegator[pusher+readerFrom+closeNotifier] = func(d *responseWriterDelegator) delegator { // 25
96 *responseWriterDelegator
100 }{d, pusherDelegator{d}, readerFromDelegator{d}, closeNotifierDelegator{d}}
102 pickDelegator[pusher+readerFrom+flusher] = func(d *responseWriterDelegator) delegator { // 26
104 *responseWriterDelegator
108 }{d, pusherDelegator{d}, readerFromDelegator{d}, flusherDelegator{d}}
110 pickDelegator[pusher+readerFrom+flusher+closeNotifier] = func(d *responseWriterDelegator) delegator { // 27
112 *responseWriterDelegator
117 }{d, pusherDelegator{d}, readerFromDelegator{d}, flusherDelegator{d}, closeNotifierDelegator{d}}
119 pickDelegator[pusher+readerFrom+hijacker] = func(d *responseWriterDelegator) delegator { // 28
121 *responseWriterDelegator
125 }{d, pusherDelegator{d}, readerFromDelegator{d}, hijackerDelegator{d}}
127 pickDelegator[pusher+readerFrom+hijacker+closeNotifier] = func(d *responseWriterDelegator) delegator { // 29
129 *responseWriterDelegator
134 }{d, pusherDelegator{d}, readerFromDelegator{d}, hijackerDelegator{d}, closeNotifierDelegator{d}}
136 pickDelegator[pusher+readerFrom+hijacker+flusher] = func(d *responseWriterDelegator) delegator { // 30
138 *responseWriterDelegator
143 }{d, pusherDelegator{d}, readerFromDelegator{d}, hijackerDelegator{d}, flusherDelegator{d}}
145 pickDelegator[pusher+readerFrom+hijacker+flusher+closeNotifier] = func(d *responseWriterDelegator) delegator { // 31
147 *responseWriterDelegator
153 }{d, pusherDelegator{d}, readerFromDelegator{d}, hijackerDelegator{d}, flusherDelegator{d}, closeNotifierDelegator{d}}
157 func newDelegator(w http.ResponseWriter, observeWriteHeaderFunc func(int)) delegator {
158 d := &responseWriterDelegator{
160 observeWriteHeader: observeWriteHeaderFunc,
164 if _, ok := w.(http.CloseNotifier); ok {
167 if _, ok := w.(http.Flusher); ok {
170 if _, ok := w.(http.Hijacker); ok {
173 if _, ok := w.(io.ReaderFrom); ok {
176 if _, ok := w.(http.Pusher); ok {
180 return pickDelegator[id](d)