package propagation
import (
"context"
"go.opentelemetry.io/otel/baggage"
)
const baggageHeader = "baggage"
type Baggage struct {}
var _ TextMapPropagator = Baggage {}
func (Baggage ) Inject (ctx context .Context , carrier TextMapCarrier ) {
bStr := baggage .FromContext (ctx ).String ()
if bStr != "" {
carrier .Set (baggageHeader , bStr )
}
}
func (Baggage ) Extract (parent context .Context , carrier TextMapCarrier ) context .Context {
if multiCarrier , ok := carrier .(ValuesGetter ); ok {
return extractMultiBaggage (parent , multiCarrier )
}
return extractSingleBaggage (parent , carrier )
}
func (Baggage ) Fields () []string {
return []string {baggageHeader }
}
func extractSingleBaggage(parent context .Context , carrier TextMapCarrier ) context .Context {
bStr := carrier .Get (baggageHeader )
if bStr == "" {
return parent
}
bag , err := baggage .Parse (bStr )
if err != nil {
return parent
}
return baggage .ContextWithBaggage (parent , bag )
}
func extractMultiBaggage(parent context .Context , carrier ValuesGetter ) context .Context {
bVals := carrier .Values (baggageHeader )
if len (bVals ) == 0 {
return parent
}
var members []baggage .Member
for _ , bStr := range bVals {
currBag , err := baggage .Parse (bStr )
if err != nil {
continue
}
members = append (members , currBag .Members ()...)
}
b , err := baggage .New (members ...)
if err != nil || b .Len () == 0 {
return parent
}
return baggage .ContextWithBaggage (parent , b )
}
The pages are generated with Golds v0.8.2 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .