C++ Client-Side SDK
LaunchDarkly SDK
client.hpp
1 #pragma once
2 
3 #include <chrono>
4 #include <future>
5 #include <memory>
6 #include <string>
7 #include <unordered_map>
8 
9 #include <launchdarkly/context.hpp>
10 #include <launchdarkly/value.hpp>
11 
12 #include <launchdarkly/client_side/data_source_status.hpp>
13 #include <launchdarkly/client_side/flag_notifier.hpp>
14 #include <launchdarkly/config/client.hpp>
15 #include <launchdarkly/data/evaluation_detail.hpp>
16 
17 namespace launchdarkly::client_side {
18 
22 class IClient {
23  public:
27  using FlagKey = std::string;
28 
46  virtual std::future<bool> StartAsync() = 0;
47 
68  [[nodiscard]] virtual bool Initialized() const = 0;
69 
78  [[nodiscard]] virtual std::unordered_map<FlagKey, Value> AllFlags()
79  const = 0;
80 
92  virtual void Track(std::string event_name,
93  Value data,
94  double metric_value) = 0;
95 
104  virtual void Track(std::string event_name, Value data) = 0;
105 
112  virtual void Track(std::string event_name) = 0;
113 
118  virtual void FlushAsync() = 0;
119 
137  virtual std::future<bool> IdentifyAsync(Context context) = 0;
138 
147  virtual bool BoolVariation(FlagKey const& key, bool default_value) = 0;
148 
158  bool default_value) = 0;
159 
168  virtual std::string StringVariation(FlagKey const& key,
169  std::string default_value) = 0;
170 
180  FlagKey const& key,
181  std::string default_value) = 0;
182 
191  virtual double DoubleVariation(FlagKey const& key,
192  double default_value) = 0;
193 
203  FlagKey const& key,
204  double default_value) = 0;
205 
214  virtual int IntVariation(FlagKey const& key, int default_value) = 0;
215 
225  int default_value) = 0;
226 
235  virtual Value JsonVariation(FlagKey const& key, Value default_value) = 0;
236 
246  FlagKey const& key,
247  Value default_value) = 0;
248 
255 
262 
263  virtual ~IClient() = default;
264  IClient(IClient const& item) = delete;
265  IClient(IClient&& item) = delete;
266  IClient& operator=(IClient const&) = delete;
267  IClient& operator=(IClient&&) = delete;
268 
269  protected:
270  IClient() = default;
271 };
272 
273 class Client : public IClient {
274  public:
275  Client(Config config, Context context);
276 
277  Client(Client&&) = delete;
278  Client(Client const&) = delete;
279  Client& operator=(Client) = delete;
280  Client& operator=(Client&& other) = delete;
281 
282  std::future<bool> StartAsync() override;
283 
284  [[nodiscard]] bool Initialized() const override;
285 
286  using FlagKey = std::string;
287  [[nodiscard]] std::unordered_map<FlagKey, Value> AllFlags() const override;
288 
289  void Track(std::string event_name,
290  Value data,
291  double metric_value) override;
292 
293  void Track(std::string event_name, Value data) override;
294 
295  void Track(std::string event_name) override;
296 
297  void FlushAsync() override;
298 
299  std::future<bool> IdentifyAsync(Context context) override;
300 
301  bool BoolVariation(FlagKey const& key, bool default_value) override;
302 
304  bool default_value) override;
305 
306  std::string StringVariation(FlagKey const& key,
307  std::string default_value) override;
308 
310  FlagKey const& key,
311  std::string default_value) override;
312 
313  double DoubleVariation(FlagKey const& key, double default_value) override;
314 
316  FlagKey const& key,
317  double default_value) override;
318 
319  int IntVariation(FlagKey const& key, int default_value) override;
320 
322  int default_value) override;
323 
324  Value JsonVariation(FlagKey const& key, Value default_value) override;
325 
327  Value default_value) override;
328 
330 
332 
337  [[nodiscard]] static char const* Version();
338 
339  private:
340  inline static char const* const kVersion =
341  "3.5.0"; // {x-release-please-version}
342  std::unique_ptr<IClient> client;
343 };
344 
345 } // namespace launchdarkly::client_side
Definition: context.hpp:29
Definition: evaluation_detail.hpp:18
Definition: value.hpp:42
Definition: client.hpp:273
EvaluationDetail< Value > JsonVariationDetail(FlagKey const &key, Value default_value) override
Definition: client.cpp:86
flag_manager::IFlagNotifier & FlagNotifier() override
Definition: client.cpp:95
double DoubleVariation(FlagKey const &key, double default_value) override
Definition: client.cpp:64
EvaluationDetail< double > DoubleVariationDetail(FlagKey const &key, double default_value) override
Definition: client.cpp:68
bool BoolVariation(FlagKey const &key, bool default_value) override
Definition: client.cpp:44
EvaluationDetail< std::string > StringVariationDetail(FlagKey const &key, std::string default_value) override
Definition: client.cpp:58
std::future< bool > StartAsync() override
Definition: client.cpp:15
std::unordered_map< FlagKey, Value > AllFlags() const override
Definition: client.cpp:20
EvaluationDetail< int > IntVariationDetail(FlagKey const &key, int default_value) override
Definition: client.cpp:77
std::future< bool > IdentifyAsync(Context context) override
Definition: client.cpp:40
static char const * Version()
Definition: client.cpp:99
Value JsonVariation(FlagKey const &key, Value default_value) override
Definition: client.cpp:82
EvaluationDetail< bool > BoolVariationDetail(FlagKey const &key, bool default_value) override
Definition: client.cpp:48
std::string StringVariation(FlagKey const &key, std::string default_value) override
Definition: client.cpp:53
void FlushAsync() override
Definition: client.cpp:36
data_sources::IDataSourceStatusProvider & DataSourceStatus() override
Definition: client.cpp:91
void Track(std::string event_name, Value data, double metric_value) override
Definition: client.cpp:24
int IntVariation(FlagKey const &key, int default_value) override
Definition: client.cpp:73
bool Initialized() const override
Definition: client.cpp:11
Definition: client.hpp:22
virtual double DoubleVariation(FlagKey const &key, double default_value)=0
virtual Value JsonVariation(FlagKey const &key, Value default_value)=0
virtual EvaluationDetail< bool > BoolVariationDetail(FlagKey const &key, bool default_value)=0
virtual data_sources::IDataSourceStatusProvider & DataSourceStatus()=0
virtual void Track(std::string event_name)=0
virtual void Track(std::string event_name, Value data, double metric_value)=0
virtual EvaluationDetail< double > DoubleVariationDetail(FlagKey const &key, double default_value)=0
virtual std::unordered_map< FlagKey, Value > AllFlags() const =0
virtual std::string StringVariation(FlagKey const &key, std::string default_value)=0
virtual flag_manager::IFlagNotifier & FlagNotifier()=0
virtual int IntVariation(FlagKey const &key, int default_value)=0
virtual EvaluationDetail< Value > JsonVariationDetail(FlagKey const &key, Value default_value)=0
virtual bool Initialized() const =0
virtual EvaluationDetail< int > IntVariationDetail(FlagKey const &key, int default_value)=0
virtual bool BoolVariation(FlagKey const &key, bool default_value)=0
virtual std::future< bool > StartAsync()=0
virtual std::future< bool > IdentifyAsync(Context context)=0
virtual void Track(std::string event_name, Value data)=0
std::string FlagKey
Definition: client.hpp:27
virtual EvaluationDetail< std::string > StringVariationDetail(FlagKey const &key, std::string default_value)=0
Definition: config.hpp:20