1// +build !go1.7
2
3package aws
4
5import "time"
6
7// An emptyCtx is a copy of the Go 1.7 context.emptyCtx type. This is copied to
8// provide a 1.6 and 1.5 safe version of context that is compatible with Go
9// 1.7's Context.
10//
11// An emptyCtx is never canceled, has no values, and has no deadline. It is not
12// struct{}, since vars of this type must have distinct addresses.
13type emptyCtx int
14
15func (*emptyCtx) Deadline() (deadline time.Time, ok bool) {
16	return
17}
18
19func (*emptyCtx) Done() <-chan struct{} {
20	return nil
21}
22
23func (*emptyCtx) Err() error {
24	return nil
25}
26
27func (*emptyCtx) Value(key interface{}) interface{} {
28	return nil
29}
30
31func (e *emptyCtx) String() string {
32	switch e {
33	case backgroundCtx:
34		return "aws.BackgroundContext"
35	}
36	return "unknown empty Context"
37}
38
39var (
40	backgroundCtx = new(emptyCtx)
41)
42
43// BackgroundContext returns a context that will never be canceled, has no
44// values, and no deadline. This context is used by the SDK to provide
45// backwards compatibility with non-context API operations and functionality.
46//
47// Go 1.6 and before:
48// This context function is equivalent to context.Background in the Go stdlib.
49//
50// Go 1.7 and later:
51// The context returned will be the value returned by context.Background()
52//
53// See https://golang.org/pkg/context for more information on Contexts.
54func BackgroundContext() Context {
55	return backgroundCtx
56}
57