userver
C++ Async Framework
Toggle main menu visibility
Loading...
Searching...
No Matches
headers.hpp
Go to the documentation of this file.
1
#
pragma
once
2
3
/// @file userver/kafka/headers.hpp
4
/// @brief Kafka message header views and readers
5
6
#
include
<
cstddef
>
7
#
include
<
iterator
>
8
#
include
<
string_view
>
9
10
#
include
<
userver
/
utils
/
span
.
hpp
>
11
#
include
<
userver
/
utils
/
zstring_view
.
hpp
>
12
13
struct
rd_kafka_headers_s;
14
15
USERVER_NAMESPACE_BEGIN
16
17
namespace
kafka {
18
19
/// @brief Wrapper for Kafka header.
20
/// Header `name` must be valid null-terminated string.
21
/// Header `value` is treated as a binary data by Kafka.
22
struct
HeaderView
final
{
23
utils
::
zstring_view
name;
24
std::string_view value;
25
26
bool
operator==(
const
HeaderView&)
const
;
27
};
28
29
/// @brief Owning wrapper for Kafka header.
30
class
OwningHeader
final
{
31
public
:
32
explicit
OwningHeader(HeaderView header);
33
34
OwningHeader(std::string name, std::string value);
35
36
const
std::string& GetName()
const
noexcept
;
37
38
std::string_view GetValue()
const
noexcept
;
39
40
private
:
41
std::string name_;
42
std::string value_;
43
};
44
45
bool
operator==(
const
HeaderView& lhs,
const
OwningHeader& rhs);
46
bool
operator==(
const
OwningHeader& lhs,
const
HeaderView& rhs);
47
48
/// @brief Ordered list of HeaderView.
49
/// Duplicated keys are supported.
50
/// Keys order is preserved.
51
using
HeaderViews
=
utils
::
span
<
const
HeaderView>;
52
53
/// @brief Header views iterator.
54
class
HeadersIterator
{
55
public
:
56
using
iterator_category = std::forward_iterator_tag;
57
using
difference_type = std::ptrdiff_t;
58
using
value_type = HeaderView;
59
using
reference = HeaderView;
60
using
pointer = reference*;
61
62
HeadersIterator() =
default
;
63
HeadersIterator(
const
rd_kafka_headers_s* headers, std::size_t index);
64
65
HeadersIterator
operator++(
int
);
66
HeadersIterator
& operator++();
67
68
reference operator*()
const
;
69
70
bool
operator==(
const
HeadersIterator
&)
const
;
71
72
private
:
73
const
rd_kafka_headers_s* headers_{
nullptr
};
74
std::size_t index_{0};
75
};
76
77
static_assert
(std::forward_iterator<
HeadersIterator
>);
78
79
/// @brief Class to read all message's headers.
80
class
HeadersReader
{
81
public
:
82
/// @note if `name` passed, only headers with matching name are read.
83
HeadersReader
(
const
rd_kafka_headers_s*);
84
85
HeadersIterator
begin()
const
;
86
HeadersIterator
end()
const
;
87
88
std::size_t size()
const
noexcept
;
89
90
private
:
91
const
rd_kafka_headers_s* headers_{
nullptr
};
92
std::size_t size_;
93
};
94
95
}
// namespace kafka
96
97
USERVER_NAMESPACE_END
userver
kafka
headers.hpp
Generated on
for userver by
Doxygen
1.17.0