1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
|
package kong
import (
"bytes"
"net/http"
"strings"
)
// String returns pointer to s.
func String(s string) *string {
return &s
}
// Bool returns a pointer to b.
func Bool(b bool) *bool {
return &b
}
// Int returns a pointer to i.
func Int(i int) *int {
return &i
}
func isEmptyString(s *string) bool {
return s == nil || strings.TrimSpace(*s) == ""
}
// StringSlice converts a slice of string to a
// slice of *string
func StringSlice(elements ...string) []*string {
var res []*string
for _, element := range elements {
e := element
res = append(res, &e)
}
return res
}
func stringArrayToString(arr []*string) string {
if arr == nil {
return "nil"
}
var buf bytes.Buffer
buf.WriteString("[ ")
l := len(arr)
for i, el := range arr {
buf.WriteString(*el)
if i != l-1 {
buf.WriteString(", ")
}
}
buf.WriteString(" ]")
return buf.String()
}
// headerRoundTripper injects Headers into requests
// made via RT.
type headerRoundTripper struct {
headers http.Header
rt http.RoundTripper
}
// RoundTrip satisfies the RoundTripper interface.
func (t headerRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) {
newRequest := new(http.Request)
*newRequest = *req
newRequest.Header = make(http.Header, len(req.Header))
for k, s := range req.Header {
newRequest.Header[k] = append([]string(nil), s...)
}
for k, v := range t.headers {
newRequest.Header[k] = v
}
return t.rt.RoundTrip(newRequest)
}
// RoundTripperWithHTTPHeaders returns a client which injects headers
// before sending any request.
func HTTPClientWithHeaders(client *http.Client,
headers http.Header) http.Client {
var res http.Client
if client == nil {
defaultTransport := http.DefaultTransport.(*http.Transport)
res.Transport = defaultTransport
} else {
res = *client
}
res.Transport = headerRoundTripper{
headers: headers,
rt: client.Transport,
}
return res
}
|