1
#pragma once
2

            
3
/*
4
 * This file contains implementations of the datadog::tracing::DictReader and
5
 * datadog::tracing::DictWriter interfaces.
6
 *
7
 * The Datadog core tracing library, dd-trace-cpp, uses these interfaces
8
 * anywhere it needs to read from or write to mappings of string, such as when
9
 * extracting trace context, injecting trace context, reading HTTP response
10
 * headers, or writing HTTP request headers.
11
 */
12

            
13
#include <string>
14

            
15
#include "datadog/dict_reader.h"
16
#include "datadog/dict_writer.h"
17

            
18
namespace Envoy {
19
namespace Tracing {
20
class TraceContext;
21
} // namespace Tracing
22
namespace Http {
23
class RequestHeaderMap;
24
class ResponseHeaderMap;
25
} // namespace Http
26
namespace Extensions {
27
namespace Tracers {
28
namespace Datadog {
29

            
30
class RequestHeaderWriter : public datadog::tracing::DictWriter {
31
public:
32
  explicit RequestHeaderWriter(Http::RequestHeaderMap& headers);
33

            
34
  void set(datadog::tracing::StringView key, datadog::tracing::StringView value) override;
35

            
36
private:
37
  Http::RequestHeaderMap& headers_;
38
};
39

            
40
class ResponseHeaderReader : public datadog::tracing::DictReader {
41
public:
42
  explicit ResponseHeaderReader(const Http::ResponseHeaderMap& headers);
43

            
44
  datadog::tracing::Optional<datadog::tracing::StringView>
45
  lookup(datadog::tracing::StringView key) const override;
46

            
47
  void visit(const std::function<void(datadog::tracing::StringView key,
48
                                      datadog::tracing::StringView value)>& visitor) const override;
49

            
50
private:
51
  const Http::ResponseHeaderMap& headers_;
52
  mutable std::string buffer_;
53
};
54

            
55
class TraceContextReader : public datadog::tracing::DictReader {
56
public:
57
  explicit TraceContextReader(const Tracing::TraceContext& context);
58

            
59
  datadog::tracing::Optional<datadog::tracing::StringView>
60
  lookup(datadog::tracing::StringView key) const override;
61

            
62
  void visit(const std::function<void(datadog::tracing::StringView key,
63
                                      datadog::tracing::StringView value)>& visitor) const override;
64

            
65
private:
66
  const Tracing::TraceContext& context_;
67
};
68

            
69
} // namespace Datadog
70
} // namespace Tracers
71
} // namespace Extensions
72
} // namespace Envoy