#include namespace opentracing { BEGIN_OPENTRACING_ABI_NAMESPACE namespace { class PropagationErrorCategory : public std::error_category { public: // Needed to fix bug in macOS build // (https://travis-ci.org/isaachier/hunter/jobs/281868518). // See https://stackoverflow.com/a/7411708/1930331 for justification. PropagationErrorCategory() {} const char* name() const noexcept override { return "OpenTracingPropagationError"; } std::error_condition default_error_condition(int code) const noexcept override { if (code == invalid_span_context_error.value()) { return std::make_error_condition(std::errc::not_supported); } if (code == invalid_carrier_error.value()) { return std::make_error_condition(std::errc::invalid_argument); } if (code == span_context_corrupted_error.value()) { return std::make_error_condition(std::errc::invalid_argument); } if (code == key_not_found_error.value()) { return std::make_error_condition(std::errc::invalid_argument); } if (code == lookup_key_not_supported_error.value()) { return std::make_error_condition(std::errc::not_supported); } return std::error_condition(code, *this); } std::string message(int code) const override { if (code == invalid_span_context_error.value()) { return "opentracing: SpanContext type incompatible with tracer"; } if (code == invalid_carrier_error.value()) { return "opentracing: Invalid Inject/Extract carrier"; } if (code == span_context_corrupted_error.value()) { return "opentracing: SpanContext data corrupted in Extract carrier"; } if (code == key_not_found_error.value()) { return "opentracing: SpanContext key not found"; } if (code == lookup_key_not_supported_error.value()) { return "opentracing: Lookup for the given key is not supported"; } return "opentracing: unknown propagation error"; } }; } // anonymous namespace const std::error_category& propagation_error_category() { static const PropagationErrorCategory error_category; return error_category; } END_OPENTRACING_ABI_NAMESPACE } // namespace opentracing