зеркало из https://github.com/microsoft/docker.git
65 строки
1.6 KiB
Go
65 строки
1.6 KiB
Go
package context
|
|
|
|
import (
|
|
"golang.org/x/net/context"
|
|
|
|
"github.com/docker/docker/pkg/version"
|
|
)
|
|
|
|
const (
|
|
// RequestID is the unique ID for each http request
|
|
RequestID = "request-id"
|
|
|
|
// APIVersion is the client's requested API version
|
|
APIVersion = "api-version"
|
|
)
|
|
|
|
// Context is just our own wrapper for the golang 'Context' - mainly
|
|
// so we can add our over version of the funcs.
|
|
type Context struct {
|
|
context.Context
|
|
}
|
|
|
|
// Background creates a new Context based on golang's default one.
|
|
func Background() Context {
|
|
return Context{context.Background()}
|
|
}
|
|
|
|
// WithValue will return a Context that has this new key/value pair
|
|
// associated with it. Just uses the golang version but then wraps it.
|
|
func WithValue(ctx Context, key, value interface{}) Context {
|
|
return Context{context.WithValue(ctx, key, value)}
|
|
}
|
|
|
|
// RequestID is a utility func to make it easier to get the
|
|
// request ID associated with this Context/request.
|
|
func (ctx Context) RequestID() string {
|
|
val := ctx.Value(RequestID)
|
|
if val == nil {
|
|
return ""
|
|
}
|
|
|
|
id, ok := val.(string)
|
|
if !ok {
|
|
// Ideally we shouldn't panic but we also should never get here
|
|
panic("Context RequestID isn't a string")
|
|
}
|
|
return id
|
|
}
|
|
|
|
// Version is a utility func to make it easier to get the
|
|
// API version string associated with this Context/request.
|
|
func (ctx Context) Version() version.Version {
|
|
val := ctx.Value(APIVersion)
|
|
if val == nil {
|
|
return version.Version("")
|
|
}
|
|
|
|
ver, ok := val.(version.Version)
|
|
if !ok {
|
|
// Ideally we shouldn't panic but we also should never get here
|
|
panic("Context APIVersion isn't a version.Version")
|
|
}
|
|
return ver
|
|
}
|