| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 | package coreimport (	"context")// XrayKey is the key type of Instance in Context, exported for test.type XrayKey intconst xrayKey XrayKey = 1// FromContext returns an Instance from the given context, or nil if the context doesn't contain one.func FromContext(ctx context.Context) *Instance {	if s, ok := ctx.Value(xrayKey).(*Instance); ok {		return s	}	return nil}// MustFromContext returns an Instance from the given context, or panics if not present.func MustFromContext(ctx context.Context) *Instance {	x := FromContext(ctx)	if x == nil {		panic("X is not in context.")	}	return x}/*	toContext returns ctx from the given context, or creates an Instance if the context doesn't find that.It is unsupported to use this function to create a context that is suitable to invoke Xray's internal componentin third party code, you shouldn't use //go:linkname to alias of this function into your own package anduse this function in your third party code.For third party code, usage enabled by creating a context to interact with Xray's internal component is unsupported,and may break at any time.*/func toContext(ctx context.Context, v *Instance) context.Context {	if FromContext(ctx) != v {		ctx = context.WithValue(ctx, xrayKey, v)	}	return ctx}/*ToBackgroundDetachedContext create a detached context from another contextInternal API*/func ToBackgroundDetachedContext(ctx context.Context) context.Context {	instance := MustFromContext(ctx)	return toContext(context.Background(), instance)}
 |