Copyright The OpenTelemetry Authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

package internal

import (
	
	

	
	
	
	
)

type (
	traceProviderHolder struct {
		tp trace.Provider
	}

	meterProviderHolder struct {
		mp metric.Provider
	}

	propagatorsHolder struct {
		pr propagation.Propagators
	}
)

var (
	globalTracer      = defaultTracerValue()
	globalMeter       = defaultMeterValue()
	globalPropagators = defaultPropagatorsValue()

	delegateMeterOnce sync.Once
	delegateTraceOnce sync.Once
)
TraceProvider is the internal implementation for global.TraceProvider.
SetTraceProvider is the internal implementation for global.SetTraceProvider.
Setting the provider to the prior default is nonsense, panic. Panic is acceptable because we are likely still early in the process lifetime.
			panic("invalid Provider, the global instance cannot be reinstalled")
		} else if ,  := .(*traceProvider);  {
			.setDelegate()
		}

	})
	globalTracer.Store(traceProviderHolder{tp: })
}
MeterProvider is the internal implementation for global.MeterProvider.
SetMeterProvider is the internal implementation for global.SetMeterProvider.
Setting the provider to the prior default is nonsense, panic. Panic is acceptable because we are likely still early in the process lifetime.
			panic("invalid Provider, the global instance cannot be reinstalled")
		} else if ,  := .(*meterProvider);  {
			.setDelegate()
		}
	})
	globalMeter.Store(meterProviderHolder{mp: })
}
Propagators is the internal implementation for global.Propagators.
SetPropagators is the internal implementation for global.SetPropagators.
getDefaultPropagators returns a default Propagators, configured with W3C trace and correlation context propagation.
func () propagation.Propagators {
	 := trace.TraceContext{}
	 := correlation.CorrelationContext{}
	return propagation.New(
		propagation.WithExtractors(, ),
		propagation.WithInjectors(, ),
	)
}
ResetForTest restores the initial global state, for testing purposes.