// Copyright 2019 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Package tag provides support for telemetry tagging. package tag import ( "context" "golang.org/x/tools/internal/telemetry" ) // Key represents the key for a context tag. // It is a helper to make use of context tagging slightly easier to read, it is // not strictly needed to use it at all. // It is intended that your common tagging keys are declared as constants of // this type, and then you can use the methods of this type to apply and find // those values in the context. type Key string // Of returns a Tag for a key and value. // This is a trivial helper that makes common logging easier to read. func Of(key interface{}, value interface{}) telemetry.Tag { return telemetry.Tag{Key: key, Value: value} } // Of creates a new Tag with this key and the supplied value. // You can use this when building a tag list. func (k Key) Of(v interface{}) telemetry.Tag { return telemetry.Tag{Key: k, Value: v} } // Tag can be used to get a tag for the key from a context. // It makes Key conform to the Tagger interface. func (k Key) Tag(ctx context.Context) telemetry.Tag { return telemetry.Tag{Key: k, Value: ctx.Value(k)} } // With applies sets this key to the supplied value on the context and // returns the new context generated. // It uses the With package level function so that observers are also notified. func (k Key) With(ctx context.Context, v interface{}) context.Context { return With(ctx, telemetry.Tag{Key: k, Value: v}) }