Code refactoring for bpa operator
[icn.git] / cmd / bpa-operator / vendor / github.com / prometheus / client_golang / prometheus / promhttp / delegator_1_8.go
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
5 //
6 // http://www.apache.org/licenses/LICENSE-2.0
7 //
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.
13
14 // +build go1.8
15
16 package promhttp
17
18 import (
19         "io"
20         "net/http"
21 )
22
23 type pusherDelegator struct{ *responseWriterDelegator }
24
25 func (d pusherDelegator) Push(target string, opts *http.PushOptions) error {
26         return d.ResponseWriter.(http.Pusher).Push(target, opts)
27 }
28
29 func init() {
30         pickDelegator[pusher] = func(d *responseWriterDelegator) delegator { // 16
31                 return pusherDelegator{d}
32         }
33         pickDelegator[pusher+closeNotifier] = func(d *responseWriterDelegator) delegator { // 17
34                 return struct {
35                         *responseWriterDelegator
36                         http.Pusher
37                         http.CloseNotifier
38                 }{d, pusherDelegator{d}, closeNotifierDelegator{d}}
39         }
40         pickDelegator[pusher+flusher] = func(d *responseWriterDelegator) delegator { // 18
41                 return struct {
42                         *responseWriterDelegator
43                         http.Pusher
44                         http.Flusher
45                 }{d, pusherDelegator{d}, flusherDelegator{d}}
46         }
47         pickDelegator[pusher+flusher+closeNotifier] = func(d *responseWriterDelegator) delegator { // 19
48                 return struct {
49                         *responseWriterDelegator
50                         http.Pusher
51                         http.Flusher
52                         http.CloseNotifier
53                 }{d, pusherDelegator{d}, flusherDelegator{d}, closeNotifierDelegator{d}}
54         }
55         pickDelegator[pusher+hijacker] = func(d *responseWriterDelegator) delegator { // 20
56                 return struct {
57                         *responseWriterDelegator
58                         http.Pusher
59                         http.Hijacker
60                 }{d, pusherDelegator{d}, hijackerDelegator{d}}
61         }
62         pickDelegator[pusher+hijacker+closeNotifier] = func(d *responseWriterDelegator) delegator { // 21
63                 return struct {
64                         *responseWriterDelegator
65                         http.Pusher
66                         http.Hijacker
67                         http.CloseNotifier
68                 }{d, pusherDelegator{d}, hijackerDelegator{d}, closeNotifierDelegator{d}}
69         }
70         pickDelegator[pusher+hijacker+flusher] = func(d *responseWriterDelegator) delegator { // 22
71                 return struct {
72                         *responseWriterDelegator
73                         http.Pusher
74                         http.Hijacker
75                         http.Flusher
76                 }{d, pusherDelegator{d}, hijackerDelegator{d}, flusherDelegator{d}}
77         }
78         pickDelegator[pusher+hijacker+flusher+closeNotifier] = func(d *responseWriterDelegator) delegator { //23
79                 return struct {
80                         *responseWriterDelegator
81                         http.Pusher
82                         http.Hijacker
83                         http.Flusher
84                         http.CloseNotifier
85                 }{d, pusherDelegator{d}, hijackerDelegator{d}, flusherDelegator{d}, closeNotifierDelegator{d}}
86         }
87         pickDelegator[pusher+readerFrom] = func(d *responseWriterDelegator) delegator { // 24
88                 return struct {
89                         *responseWriterDelegator
90                         http.Pusher
91                         io.ReaderFrom
92                 }{d, pusherDelegator{d}, readerFromDelegator{d}}
93         }
94         pickDelegator[pusher+readerFrom+closeNotifier] = func(d *responseWriterDelegator) delegator { // 25
95                 return struct {
96                         *responseWriterDelegator
97                         http.Pusher
98                         io.ReaderFrom
99                         http.CloseNotifier
100                 }{d, pusherDelegator{d}, readerFromDelegator{d}, closeNotifierDelegator{d}}
101         }
102         pickDelegator[pusher+readerFrom+flusher] = func(d *responseWriterDelegator) delegator { // 26
103                 return struct {
104                         *responseWriterDelegator
105                         http.Pusher
106                         io.ReaderFrom
107                         http.Flusher
108                 }{d, pusherDelegator{d}, readerFromDelegator{d}, flusherDelegator{d}}
109         }
110         pickDelegator[pusher+readerFrom+flusher+closeNotifier] = func(d *responseWriterDelegator) delegator { // 27
111                 return struct {
112                         *responseWriterDelegator
113                         http.Pusher
114                         io.ReaderFrom
115                         http.Flusher
116                         http.CloseNotifier
117                 }{d, pusherDelegator{d}, readerFromDelegator{d}, flusherDelegator{d}, closeNotifierDelegator{d}}
118         }
119         pickDelegator[pusher+readerFrom+hijacker] = func(d *responseWriterDelegator) delegator { // 28
120                 return struct {
121                         *responseWriterDelegator
122                         http.Pusher
123                         io.ReaderFrom
124                         http.Hijacker
125                 }{d, pusherDelegator{d}, readerFromDelegator{d}, hijackerDelegator{d}}
126         }
127         pickDelegator[pusher+readerFrom+hijacker+closeNotifier] = func(d *responseWriterDelegator) delegator { // 29
128                 return struct {
129                         *responseWriterDelegator
130                         http.Pusher
131                         io.ReaderFrom
132                         http.Hijacker
133                         http.CloseNotifier
134                 }{d, pusherDelegator{d}, readerFromDelegator{d}, hijackerDelegator{d}, closeNotifierDelegator{d}}
135         }
136         pickDelegator[pusher+readerFrom+hijacker+flusher] = func(d *responseWriterDelegator) delegator { // 30
137                 return struct {
138                         *responseWriterDelegator
139                         http.Pusher
140                         io.ReaderFrom
141                         http.Hijacker
142                         http.Flusher
143                 }{d, pusherDelegator{d}, readerFromDelegator{d}, hijackerDelegator{d}, flusherDelegator{d}}
144         }
145         pickDelegator[pusher+readerFrom+hijacker+flusher+closeNotifier] = func(d *responseWriterDelegator) delegator { // 31
146                 return struct {
147                         *responseWriterDelegator
148                         http.Pusher
149                         io.ReaderFrom
150                         http.Hijacker
151                         http.Flusher
152                         http.CloseNotifier
153                 }{d, pusherDelegator{d}, readerFromDelegator{d}, hijackerDelegator{d}, flusherDelegator{d}, closeNotifierDelegator{d}}
154         }
155 }
156
157 func newDelegator(w http.ResponseWriter, observeWriteHeaderFunc func(int)) delegator {
158         d := &responseWriterDelegator{
159                 ResponseWriter:     w,
160                 observeWriteHeader: observeWriteHeaderFunc,
161         }
162
163         id := 0
164         if _, ok := w.(http.CloseNotifier); ok {
165                 id += closeNotifier
166         }
167         if _, ok := w.(http.Flusher); ok {
168                 id += flusher
169         }
170         if _, ok := w.(http.Hijacker); ok {
171                 id += hijacker
172         }
173         if _, ok := w.(io.ReaderFrom); ok {
174                 id += readerFrom
175         }
176         if _, ok := w.(http.Pusher); ok {
177                 id += pusher
178         }
179
180         return pickDelegator[id](d)
181 }