"Fossies" - the Fresh Open Source Software Archive 
Member "gdrive-2.1.1/vendor/golang.org/x/oauth2/internal/transport.go" (28 May 2021, 2058 Bytes) of package /linux/misc/gdrive-2.1.1.tar.gz:
As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) Go source code syntax highlighting (style:
standard) with prefixed line numbers and
code folding option.
Alternatively you can here
view or
download the uninterpreted source code file.
1 // Copyright 2014 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4
5 // Package internal contains support packages for oauth2 package.
6 package internal
7
8 import (
9 "net/http"
10
11 "golang.org/x/net/context"
12 )
13
14 // HTTPClient is the context key to use with golang.org/x/net/context's
15 // WithValue function to associate an *http.Client value with a context.
16 var HTTPClient ContextKey
17
18 // ContextKey is just an empty struct. It exists so HTTPClient can be
19 // an immutable public variable with a unique type. It's immutable
20 // because nobody else can create a ContextKey, being unexported.
21 type ContextKey struct{}
22
23 // ContextClientFunc is a func which tries to return an *http.Client
24 // given a Context value. If it returns an error, the search stops
25 // with that error. If it returns (nil, nil), the search continues
26 // down the list of registered funcs.
27 type ContextClientFunc func(context.Context) (*http.Client, error)
28
29 var contextClientFuncs []ContextClientFunc
30
31 func RegisterContextClientFunc(fn ContextClientFunc) {
32 contextClientFuncs = append(contextClientFuncs, fn)
33 }
34
35 func ContextClient(ctx context.Context) (*http.Client, error) {
36 if ctx != nil {
37 if hc, ok := ctx.Value(HTTPClient).(*http.Client); ok {
38 return hc, nil
39 }
40 }
41 for _, fn := range contextClientFuncs {
42 c, err := fn(ctx)
43 if err != nil {
44 return nil, err
45 }
46 if c != nil {
47 return c, nil
48 }
49 }
50 return http.DefaultClient, nil
51 }
52
53 func ContextTransport(ctx context.Context) http.RoundTripper {
54 hc, err := ContextClient(ctx)
55 // This is a rare error case (somebody using nil on App Engine).
56 if err != nil {
57 return ErrorTransport{err}
58 }
59 return hc.Transport
60 }
61
62 // ErrorTransport returns the specified error on RoundTrip.
63 // This RoundTripper should be used in rare error cases where
64 // error handling can be postponed to response handling time.
65 type ErrorTransport struct{ Err error }
66
67 func (t ErrorTransport) RoundTrip(*http.Request) (*http.Response, error) {
68 return nil, t.Err
69 }