in tracing/impl/stackdriver_tracer.go [85:115]
func (tracer *adapterTracer) Extract(format interface{}, carrier interface{}) (opentracing.SpanContext, error) {
if format != opentracing.TextMap && format != opentracing.HTTPHeaders {
return nil, opentracing.ErrUnsupportedFormat
}
var ocSpanCtx trace.SpanContext
err := carrier.(opentracing.TextMapReader).ForeachKey(func(key, val string) error {
var ok bool
if key == traceHeader {
decoded, err := base64.StdEncoding.DecodeString(val)
if err != nil {
return err
}
ocSpanCtx, ok = propagation.FromBinary(decoded)
if !ok {
return opentracing.ErrInvalidCarrier
}
}
return nil
})
if err != nil {
return nil, err
}
return adapterSpanContext{
ctx: context.Background(),
remote: true,
ocSpanCtx: &ocSpanCtx,
}, nil
}