pulsar-client-cpp
Loading...
Searching...
No Matches
TypedMessageBuilder.h
1
19#pragma once
20
21#include <pulsar/MessageBuilder.h>
22
23#include <functional>
24
25namespace pulsar {
26
27template <typename T>
29 public:
30 using Encoder = std::function<std::string(const T&)>;
31 using Validator = std::function<void(const char* data, size_t)>;
32
34 Encoder encoder, Validator validator = [](const char*, std::size_t) {})
35 : encoder_(encoder), validator_(validator) {}
36
37 TypedMessageBuilder& setValue(const T& value) {
38 setContent(encoder_(value));
39 if (validator_) {
40 validator_(data(), size());
41 }
42 return *this;
43 }
44
45 private:
46 const Encoder encoder_;
47 const Validator validator_;
48};
49
50template <>
51class TypedMessageBuilder<std::string> : public MessageBuilder {
52 public:
53 // The validator should throw an exception to indicate the message is corrupted.
54 using Validator = std::function<void(const char* data, size_t)>;
55
56 TypedMessageBuilder(Validator validator = nullptr) : validator_(validator) {}
57
58 TypedMessageBuilder& setValue(const std::string& value) {
59 if (validator_) {
60 validator_(value.data(), value.size());
61 }
62 setContent(value);
63 return *this;
64 }
65
66 TypedMessageBuilder& setValue(std::string&& value) {
67 if (validator_) {
68 validator_(value.data(), value.size());
69 }
70 setContent(std::move(value));
71 return *this;
72 }
73
74 private:
75 Validator validator_;
76};
78
79} // namespace pulsar
Definition MessageBuilder.h:33
MessageBuilder & setContent(const void *data, size_t size)
Definition TypedMessageBuilder.h:51
Definition TypedMessageBuilder.h:28
Definition Authentication.h:31