]>
Commit | Line | Data |
---|---|---|
f67539c2 TL |
1 | #ifndef OPENTRACING_MOCKTRACER_SPAN_CONTEXT_H |
2 | #define OPENTRACING_MOCKTRACER_SPAN_CONTEXT_H | |
3 | ||
4 | #include <opentracing/mocktracer/tracer.h> | |
5 | #include <exception> | |
6 | #include <mutex> | |
7 | #include <string> | |
8 | #include "propagation.h" | |
9 | ||
10 | namespace opentracing { | |
11 | BEGIN_OPENTRACING_ABI_NAMESPACE | |
12 | namespace mocktracer { | |
13 | ||
14 | class MockSpan; | |
15 | ||
16 | class MockSpanContext : public SpanContext { | |
17 | public: | |
18 | MockSpanContext() = default; | |
19 | ||
20 | MockSpanContext(SpanContextData&& data) noexcept : data_(std::move(data)) {} | |
21 | ||
22 | MockSpanContext(const MockSpanContext&) = delete; | |
23 | MockSpanContext(MockSpanContext&&) = delete; | |
24 | ||
25 | ~MockSpanContext() override = default; | |
26 | ||
27 | MockSpanContext& operator=(const MockSpanContext&) = delete; | |
28 | MockSpanContext& operator=(MockSpanContext&& other) noexcept; | |
29 | ||
30 | void ForeachBaggageItem( | |
31 | std::function<bool(const std::string& key, const std::string& value)> f) | |
32 | const override; | |
33 | ||
34 | std::string ToTraceID() const noexcept override try { | |
35 | return std::to_string(data_.trace_id); | |
36 | } catch (const std::exception& /*e*/) { | |
37 | return {}; | |
38 | } | |
39 | ||
40 | std::string ToSpanID() const noexcept override try { | |
41 | return std::to_string(data_.span_id); | |
42 | } catch (const std::exception& /*e*/) { | |
43 | return {}; | |
44 | } | |
45 | ||
46 | uint64_t trace_id() const noexcept { return data_.trace_id; } | |
47 | ||
48 | uint64_t span_id() const noexcept { return data_.span_id; } | |
49 | ||
50 | void CopyData(SpanContextData& data) const; | |
51 | ||
52 | template <class Carrier> | |
53 | expected<void> Inject(const PropagationOptions& propagation_options, | |
54 | Carrier& writer) const { | |
55 | std::lock_guard<std::mutex> lock_guard{baggage_mutex_}; | |
56 | return InjectSpanContext(propagation_options, writer, data_); | |
57 | } | |
58 | ||
59 | template <class Carrier> | |
60 | expected<bool> Extract(const PropagationOptions& propagation_options, | |
61 | Carrier& reader) { | |
62 | std::lock_guard<std::mutex> lock_guard{baggage_mutex_}; | |
63 | return ExtractSpanContext(propagation_options, reader, data_); | |
64 | } | |
65 | ||
66 | std::unique_ptr<SpanContext> Clone() const noexcept override; | |
67 | ||
68 | private: | |
69 | friend MockSpan; | |
70 | ||
71 | mutable std::mutex baggage_mutex_; | |
72 | SpanContextData data_; | |
73 | }; | |
74 | ||
75 | } // namespace mocktracer | |
76 | END_OPENTRACING_ABI_NAMESPACE | |
77 | } // namespace opentracing | |
78 | ||
79 | #endif // OPENTRACING_MOCKTRACER_SPAN_CONTEXT_H |