userver: userver/kafka/message.hpp Source File
Loading...
Searching...
No Matches
message.hpp
Go to the documentation of this file.
1#pragma once
2
3/// @file userver/kafka/message.hpp
4/// @brief @copybrief kafka::Message
5
6#include <chrono>
7#include <optional>
8
9#include <userver/kafka/headers.hpp>
10#include <userver/utils/fast_pimpl.hpp>
11#include <userver/utils/span.hpp>
12#include <userver/utils/zstring_view.hpp>
13
14USERVER_NAMESPACE_BEGIN
15
16namespace kafka {
17
18namespace impl {
19
20class ConsumerImpl;
21class MessageHolder;
22
23} // namespace impl
24
25/// @brief Wrapper for polled message data access.
26class Message final {
27public:
28 ~Message();
29
30 Message(Message&&) noexcept;
31 Message& operator=(Message&&) noexcept = delete;
32
33 Message(const Message&) = delete;
34 Message& operator=(const Message&) = delete;
35
36 const std::string& GetTopic() const;
37 std::string_view GetKey() const;
38 std::string_view GetPayload() const;
39 std::optional<std::chrono::milliseconds> GetTimestamp() const;
40 int GetPartition() const;
41 std::int64_t GetOffset() const;
42
43 /// @note Headers are parsed only when accessed first time.
44 ///
45 /// If name `name` passed, only headers with such name returns
46 ///
47 /// Usage example:
48 ///
49 /// - All headers:
50 /// @snippet kafka/tests/consumer_kafkatest.cpp Message iterate headers
51 /// - Start own headers
52 /// @snippet kafka/tests/consumer_kafkatest.cpp Message copy headers
54 HeadersReader GetHeaders() && = delete;
55
56 /// @brief Returns **last** header with given name.
57 /// @warning This operation has O(N) complexity, where N == number of all message headers.
58 std::optional<std::string_view> GetHeader(utils::zstring_view name) const;
59
60private:
61 friend class impl::ConsumerImpl;
62
63 explicit Message(impl::MessageHolder&& message);
64
65 struct MessageData;
66 using DataStorage = utils::FastPimpl<MessageData, 72, 8>;
67
68 DataStorage data_;
69};
70
71using MessageBatchView = utils::span<const Message>;
72
73} // namespace kafka
74
75USERVER_NAMESPACE_END