7#include <userver/utils/null_terminated_view.hpp>
8#include <userver/utils/span.hpp>
10struct rd_kafka_headers_s;
12USERVER_NAMESPACE_BEGIN
19struct HeaderView
final {
21 std::string_view value;
23 bool operator==(
const HeaderView&)
const;
27class OwningHeader
final {
29 explicit OwningHeader(HeaderView header);
31 OwningHeader(std::string name, std::string value);
33 const std::string& GetName()
const noexcept;
35 std::string_view GetValue()
const noexcept;
42bool operator==(
const HeaderView& lhs,
const OwningHeader& rhs);
43bool operator==(
const OwningHeader& lhs,
const HeaderView& rhs);
48using HeaderViews =
utils::span<
const HeaderView>;
53 using iterator_category = std::forward_iterator_tag;
54 using difference_type = std::ptrdiff_t;
55 using value_type = HeaderView;
56 using reference = HeaderView;
57 using pointer = reference*;
59 HeadersIterator() =
default;
60 HeadersIterator(
const rd_kafka_headers_s* headers, std::size_t index);
65 reference operator*()
const;
71 const rd_kafka_headers_s* headers_{
nullptr};
72 std::size_t index_{0};
75#if defined(__cpp_concepts)
76static_assert(std::forward_iterator<HeadersIterator>);
88 std::size_t size()
const noexcept;
91 const rd_kafka_headers_s* headers_{
nullptr};