| package aws |
| |
| import ( |
| "time" |
| ) |
| |
| // Context is an copy of the Go v1.7 stdlib's context.Context interface. |
| // It is represented as a SDK interface to enable you to use the "WithContext" |
| // API methods with Go v1.6 and a Context type such as golang.org/x/net/context. |
| // |
| // See https://golang.org/pkg/context on how to use contexts. |
| type Context interface { |
| // Deadline returns the time when work done on behalf of this context |
| // should be canceled. Deadline returns ok==false when no deadline is |
| // set. Successive calls to Deadline return the same results. |
| Deadline() (deadline time.Time, ok bool) |
| |
| // Done returns a channel that's closed when work done on behalf of this |
| // context should be canceled. Done may return nil if this context can |
| // never be canceled. Successive calls to Done return the same value. |
| Done() <-chan struct{} |
| |
| // Err returns a non-nil error value after Done is closed. Err returns |
| // Canceled if the context was canceled or DeadlineExceeded if the |
| // context's deadline passed. No other values for Err are defined. |
| // After Done is closed, successive calls to Err return the same value. |
| Err() error |
| |
| // Value returns the value associated with this context for key, or nil |
| // if no value is associated with key. Successive calls to Value with |
| // the same key returns the same result. |
| // |
| // Use context values only for request-scoped data that transits |
| // processes and API boundaries, not for passing optional parameters to |
| // functions. |
| Value(key interface{}) interface{} |
| } |
| |
| // BackgroundContext returns a context that will never be canceled, has no |
| // values, and no deadline. This context is used by the SDK to provide |
| // backwards compatibility with non-context API operations and functionality. |
| // |
| // Go 1.6 and before: |
| // This context function is equivalent to context.Background in the Go stdlib. |
| // |
| // Go 1.7 and later: |
| // The context returned will be the value returned by context.Background() |
| // |
| // See https://golang.org/pkg/context for more information on Contexts. |
| func BackgroundContext() Context { |
| return backgroundCtx |
| } |
| |
| // SleepWithContext will wait for the timer duration to expire, or the context |
| // is canceled. Which ever happens first. If the context is canceled the Context's |
| // error will be returned. |
| // |
| // Expects Context to always return a non-nil error if the Done channel is closed. |
| func SleepWithContext(ctx Context, dur time.Duration) error { |
| t := time.NewTimer(dur) |
| defer t.Stop() |
| |
| select { |
| case <-t.C: |
| break |
| case <-ctx.Done(): |
| return ctx.Err() |
| } |
| |
| return nil |
| } |