.. _program_listing_file_include_opentelemetry_baggage_propagation_baggage_propagator.h: Program Listing for File baggage_propagator.h ============================================= |exhale_lsh| :ref:`Return to documentation for file ` (``include/opentelemetry/baggage/propagation/baggage_propagator.h``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #pragma once #include "opentelemetry/baggage/baggage.h" #include "opentelemetry/context/propagation/text_map_propagator.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace baggage { namespace propagation { static const nostd::string_view kBaggageHeader = "baggage"; inline nostd::shared_ptr GetBaggage(const context::Context &context) { context::ContextValue context_value = context.GetValue(kBaggageHeader); if (nostd::holds_alternative>(context_value)) { return nostd::get>(context_value); } static nostd::shared_ptr empty_baggage{new baggage::Baggage()}; return empty_baggage; } inline context::Context SetBaggage(context::Context &context, nostd::shared_ptr baggage) { return context.SetValue(kBaggageHeader, baggage); } class BaggagePropagator : public context::propagation::TextMapPropagator { public: void Inject(context::propagation::TextMapCarrier &carrier, const context::Context &context) noexcept override { auto baggage = GetBaggage(context); carrier.Set(kBaggageHeader, baggage->ToHeader()); } context::Context Extract(const context::propagation::TextMapCarrier &carrier, context::Context &context) noexcept override { nostd::string_view baggage_str = carrier.Get(kBaggageHeader); auto baggage = Baggage::FromHeader(baggage_str); return SetBaggage(context, baggage); } }; } // namespace propagation } // namespace baggage OPENTELEMETRY_END_NAMESPACE