forked from TrueCloudLab/distribution
d0f5aa670b
Our context package predates the establishment of current best practices regarding context usage and it shows. It encourages bad practices such as using contexts to propagate non-request-scoped values like the application version and using string-typed keys for context values. Move the package internal to remove it from the API surface of distribution/v3@v3.0.0 so we are free to iterate on it without being constrained by compatibility. Signed-off-by: Cory Snider <csnider@mirantis.com>
22 lines
728 B
Go
22 lines
728 B
Go
package dcontext
|
|
|
|
import "context"
|
|
|
|
type versionKey struct{}
|
|
|
|
func (versionKey) String() string { return "version" }
|
|
|
|
// WithVersion stores the application version in the context. The new context
|
|
// gets a logger to ensure log messages are marked with the application
|
|
// version.
|
|
func WithVersion(ctx context.Context, version string) context.Context {
|
|
ctx = context.WithValue(ctx, versionKey{}, version)
|
|
// push a new logger onto the stack
|
|
return WithLogger(ctx, GetLogger(ctx, versionKey{}))
|
|
}
|
|
|
|
// GetVersion returns the application version from the context. An empty
|
|
// string may returned if the version was not set on the context.
|
|
func GetVersion(ctx context.Context) string {
|
|
return GetStringValue(ctx, versionKey{})
|
|
}
|