func()

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
}