#ifndef LIGHTSTEP_TEXT_MAP_CARRIER #define LIGHTSTEP_TEXT_MAP_CARRIER #include #include #include using opentracing::expected; using opentracing::string_view; using opentracing::TextMapReader; using opentracing::TextMapWriter; class TextMapCarrier : public TextMapReader, public TextMapWriter { public: TextMapCarrier(std::unordered_map& text_map) : text_map_(text_map) {} expected Set(string_view key, string_view value) const override { text_map_[key] = value; return {}; } expected ForeachKey( std::function(string_view key, string_view value)> f) const override { for (const auto& key_value : text_map_) { auto result = f(key_value.first, key_value.second); if (!result) return result; } return {}; } private: std::unordered_map& text_map_; }; #endif // LIGHTSTEP_TEXT_MAP_CARRIER