C++ Server-Side SDK
LaunchDarkly SDK
Loading...
Searching...
No Matches
attributes_builder.hpp
1#pragma once
2
3#include <string>
4
5#include <launchdarkly/attribute_reference.hpp>
6#include <launchdarkly/attributes.hpp>
7#include <launchdarkly/value.hpp>
8
9namespace launchdarkly {
10
11class ContextBuilder;
12
21template <class BuilderReturn, class BuildType>
22class AttributesBuilder final {
23 friend class ContextBuilder;
24
25 public:
33 AttributesBuilder(BuilderReturn& builder, std::string kind, std::string key)
34 : key_(std::move(key)), kind_(std::move(kind)), builder_(builder) {}
35
44 AttributesBuilder(BuilderReturn& builder,
45 std::string kind,
46 Attributes const& attributes)
47 : key_(attributes.Key()),
48 kind_(std::move(kind)),
49 builder_(builder),
50 name_(attributes.Name()),
51 anonymous_(attributes.Anonymous()),
52 private_attributes_(attributes.PrivateAttributes()) {
53 for (auto& pair : attributes.CustomAttributes().AsObject()) {
54 values_[pair.first] = pair.second;
55 }
56 }
57
62 AttributesBuilder(AttributesBuilder const& builder) = delete;
63 AttributesBuilder& operator=(AttributesBuilder const&) = delete;
64 AttributesBuilder& operator=(AttributesBuilder&&) = delete;
65
66 // This cannot be noexcept because of:
67 // https://developercommunity.visualstudio.com/t/bug-in-stdmapstdpair-implementation-with-move-only/840554
68 AttributesBuilder(AttributesBuilder&& builder) = default;
69 ~AttributesBuilder() = default;
70
79 AttributesBuilder& Name(std::string name);
80
88 AttributesBuilder& Anonymous(bool anonymous);
89
103 AttributesBuilder& Set(std::string name, launchdarkly::Value value);
104
123
169
177 template <typename IterType>
179 for (auto iter : attributes) {
180 private_attributes_.insert(iter);
181 }
182 return *this;
183 }
184
197 AttributesBuilder& Kind(std::string kind, std::string key) {
198 return builder_.Kind(kind, key);
199 }
200
208 AttributesBuilder* Kind(std::string const& kind) {
209 return builder_.Kind(kind);
210 }
211
217 [[nodiscard]] BuildType Build() const { return builder_.Build(); }
218
219 private:
220 BuilderReturn& builder_;
221
227 void Key(std::string key) { key_ = std::move(key); }
228
229 Attributes BuildAttributes() const;
230
231 AttributesBuilder& Set(std::string name,
233 bool private_attribute);
234
235 std::string kind_;
236 std::string key_;
237 std::string name_;
238 bool anonymous_ = false;
239
240 std::map<std::string, launchdarkly::Value> values_;
241 AttributeReference::SetType private_attributes_;
242};
243} // namespace launchdarkly
Definition attribute_reference.hpp:34
Definition attributes_builder.hpp:22
AttributesBuilder(BuilderReturn &builder, std::string kind, Attributes const &attributes)
Definition attributes_builder.hpp:44
AttributesBuilder & Kind(std::string kind, std::string key)
Definition attributes_builder.hpp:197
AttributesBuilder(BuilderReturn &builder, std::string kind, std::string key)
Definition attributes_builder.hpp:33
AttributesBuilder & AddPrivateAttribute(AttributeReference ref)
AttributesBuilder & SetPrivate(std::string name, launchdarkly::Value value)
AttributesBuilder & Set(std::string name, launchdarkly::Value value)
BuildType Build() const
Definition attributes_builder.hpp:217
AttributesBuilder * Kind(std::string const &kind)
Definition attributes_builder.hpp:208
AttributesBuilder & AddPrivateAttributes(IterType attributes)
Definition attributes_builder.hpp:178
AttributesBuilder & Anonymous(bool anonymous)
AttributesBuilder & Name(std::string name)
AttributesBuilder(AttributesBuilder const &builder)=delete
Definition attributes.hpp:15
Value const & CustomAttributes() const
Definition attributes.cpp:17
Definition context_builder.hpp:62
Definition value.hpp:42
Object const & AsObject() const
Definition value.cpp:121