blob: 8bb9b8b68f8b4a721d75b2d6e3e4f22af9088489 [file] [log] [blame]
sslobodrd046be82019-01-16 10:02:22 -05001// 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
16package promhttp
17
18import (
19 "io"
20 "net/http"
21)
22
23func newDelegator(w http.ResponseWriter, observeWriteHeaderFunc func(int)) delegator {
24 d := &responseWriterDelegator{
25 ResponseWriter: w,
26 observeWriteHeader: observeWriteHeaderFunc,
27 }
28
29 id := 0
30 if _, ok := w.(http.CloseNotifier); ok {
31 id += closeNotifier
32 }
33 if _, ok := w.(http.Flusher); ok {
34 id += flusher
35 }
36 if _, ok := w.(http.Hijacker); ok {
37 id += hijacker
38 }
39 if _, ok := w.(io.ReaderFrom); ok {
40 id += readerFrom
41 }
42
43 return pickDelegator[id](d)
44}