baggage_propagator.h 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. // Copyright The OpenTelemetry Authors
  2. // SPDX-License-Identifier: Apache-2.0
  3. #pragma once
  4. #include <memory>
  5. #include <string>
  6. #include "opentelemetry/baggage/baggage.h"
  7. #include "opentelemetry/baggage/baggage_context.h"
  8. #include "opentelemetry/context/context.h"
  9. #include "opentelemetry/context/propagation/text_map_propagator.h"
  10. #include "opentelemetry/nostd/function_ref.h"
  11. #include "opentelemetry/nostd/string_view.h"
  12. #include "opentelemetry/version.h"
  13. OPENTELEMETRY_BEGIN_NAMESPACE
  14. namespace baggage
  15. {
  16. namespace propagation
  17. {
  18. class BaggagePropagator : public context::propagation::TextMapPropagator
  19. {
  20. public:
  21. void Inject(context::propagation::TextMapCarrier &carrier,
  22. const context::Context &context) noexcept override
  23. {
  24. auto baggage = baggage::GetBaggage(context);
  25. auto header = baggage->ToHeader();
  26. if (header.size())
  27. {
  28. carrier.Set(kBaggageHeader, header);
  29. }
  30. }
  31. context::Context Extract(const context::propagation::TextMapCarrier &carrier,
  32. context::Context &context) noexcept override
  33. {
  34. nostd::string_view baggage_str = carrier.Get(baggage::kBaggageHeader);
  35. auto baggage = baggage::Baggage::FromHeader(baggage_str);
  36. if (baggage->ToHeader().size())
  37. {
  38. return baggage::SetBaggage(context, baggage);
  39. }
  40. else
  41. {
  42. return context;
  43. }
  44. }
  45. bool Fields(nostd::function_ref<bool(nostd::string_view)> callback) const noexcept override
  46. {
  47. return callback(kBaggageHeader);
  48. }
  49. };
  50. } // namespace propagation
  51. } // namespace baggage
  52. OPENTELEMETRY_END_NAMESPACE