C++ Server-Side SDK
LaunchDarkly SDK
client.hpp
1 #pragma once
2 
3 #include <launchdarkly/context.hpp>
4 #include <launchdarkly/data/evaluation_detail.hpp>
5 #include <launchdarkly/server_side/config/config.hpp>
6 #include <launchdarkly/server_side/hooks/hook.hpp>
7 #include <launchdarkly/value.hpp>
8 
9 #include <launchdarkly/server_side/all_flags_state.hpp>
10 #include <launchdarkly/server_side/big_segment_store_status.hpp>
11 #include <launchdarkly/server_side/data_source_status.hpp>
12 
13 #include <chrono>
14 #include <future>
15 #include <memory>
16 #include <string>
17 #include <unordered_map>
18 
19 namespace launchdarkly::server_side {
23 class IClient {
24  public:
28  using FlagKey = std::string;
29 
52  virtual std::future<bool> StartAsync() = 0;
53 
72  [[nodiscard]] virtual bool Initialized() const = 0;
73 
92  [[nodiscard]] virtual class AllFlagsState AllFlagsState(
93  Context const& context,
95 
107  virtual void Track(Context const& ctx,
108  std::string event_name,
109  Value data,
110  double metric_value) = 0;
111 
127  virtual void Track(Context const& ctx,
128  std::string event_name,
129  Value data,
130  double metric_value,
131  hooks::HookContext const& hook_context) = 0;
132 
141  virtual void Track(Context const& ctx,
142  std::string event_name,
143  Value data) = 0;
144 
157  virtual void Track(Context const& ctx,
158  std::string event_name,
159  Value data,
160  hooks::HookContext const& hook_context) = 0;
161 
168  virtual void Track(Context const& ctx, std::string event_name) = 0;
169 
180  virtual void Track(Context const& ctx,
181  std::string event_name,
182  hooks::HookContext const& hook_context) = 0;
183 
188  virtual void FlushAsync() = 0;
189 
196  virtual void Identify(Context context) = 0;
197 
206  virtual bool BoolVariation(Context const& ctx,
207  FlagKey const& key,
208  bool default_value) = 0;
209 
222  virtual bool BoolVariation(Context const& ctx,
223  FlagKey const& key,
224  bool default_value,
225  hooks::HookContext const& hook_context) = 0;
226 
236  FlagKey const& key,
237  bool default_value) = 0;
238 
252  Context const& ctx,
253  FlagKey const& key,
254  bool default_value,
255  hooks::HookContext const& hook_context) = 0;
256 
265  virtual std::string StringVariation(Context const& ctx,
266  FlagKey const& key,
267  std::string default_value) = 0;
268 
281  virtual std::string StringVariation(
282  Context const& ctx,
283  FlagKey const& key,
284  std::string default_value,
285  hooks::HookContext const& hook_context) = 0;
286 
296  Context const& ctx,
297  FlagKey const& key,
298  std::string default_value) = 0;
299 
313  Context const& ctx,
314  FlagKey const& key,
315  std::string default_value,
316  hooks::HookContext const& hook_context) = 0;
317 
326  virtual double DoubleVariation(Context const& ctx,
327  FlagKey const& key,
328  double default_value) = 0;
329 
342  virtual double DoubleVariation(Context const& ctx,
343  FlagKey const& key,
344  double default_value,
345  hooks::HookContext const& hook_context) = 0;
346 
356  Context const& ctx,
357  FlagKey const& key,
358  double default_value) = 0;
359 
373  Context const& ctx,
374  FlagKey const& key,
375  double default_value,
376  hooks::HookContext const& hook_context) = 0;
377 
386  virtual int IntVariation(Context const& ctx,
387  FlagKey const& key,
388  int default_value) = 0;
389 
402  virtual int IntVariation(Context const& ctx,
403  FlagKey const& key,
404  int default_value,
405  hooks::HookContext const& hook_context) = 0;
406 
416  FlagKey const& key,
417  int default_value) = 0;
418 
432  Context const& ctx,
433  FlagKey const& key,
434  int default_value,
435  hooks::HookContext const& hook_context) = 0;
436 
445  virtual Value JsonVariation(Context const& ctx,
446  FlagKey const& key,
447  Value default_value) = 0;
448 
461  virtual Value JsonVariation(Context const& ctx,
462  FlagKey const& key,
463  Value default_value,
464  hooks::HookContext const& hook_context) = 0;
465 
475  Context const& ctx,
476  FlagKey const& key,
477  Value default_value) = 0;
478 
492  Context const& ctx,
493  FlagKey const& key,
494  Value default_value,
495  hooks::HookContext const& hook_context) = 0;
496 
503 
511 
512  virtual ~IClient() = default;
513  IClient(IClient const& item) = delete;
514  IClient(IClient&& item) = delete;
515  IClient& operator=(IClient const&) = delete;
516  IClient& operator=(IClient&&) = delete;
517 
518  protected:
519  IClient() = default;
520 };
521 
522 class Client : public IClient {
523  public:
524  Client(Config config);
525 
526  std::future<bool> StartAsync() override;
527 
528  [[nodiscard]] bool Initialized() const override;
529 
530  using FlagKey = std::string;
531  [[nodiscard]] class AllFlagsState AllFlagsState(
532  Context const& context,
533  enum AllFlagsState::Options options =
535 
536  void Track(Context const& ctx,
537  std::string event_name,
538  Value data,
539  double metric_value) override;
540 
541  void Track(Context const& ctx,
542  std::string event_name,
543  Value data,
544  double metric_value,
545  hooks::HookContext const& hook_context) override;
546 
547  void Track(Context const& ctx, std::string event_name, Value data) override;
548 
549  void Track(Context const& ctx,
550  std::string event_name,
551  Value data,
552  hooks::HookContext const& hook_context) override;
553 
554  void Track(Context const& ctx, std::string event_name) override;
555 
556  void Track(Context const& ctx,
557  std::string event_name,
558  hooks::HookContext const& hook_context) override;
559 
560  void FlushAsync() override;
561 
562  void Identify(Context context) override;
563 
564  bool BoolVariation(Context const& ctx,
565  FlagKey const& key,
566  bool default_value) override;
567 
568  bool BoolVariation(Context const& ctx,
569  FlagKey const& key,
570  bool default_value,
571  hooks::HookContext const& hook_context) override;
572 
574  FlagKey const& key,
575  bool default_value) override;
576 
578  Context const& ctx,
579  FlagKey const& key,
580  bool default_value,
581  hooks::HookContext const& hook_context) override;
582 
583  std::string StringVariation(Context const& ctx,
584  FlagKey const& key,
585  std::string default_value) override;
586 
587  std::string StringVariation(
588  Context const& ctx,
589  FlagKey const& key,
590  std::string default_value,
591  hooks::HookContext const& hook_context) override;
592 
594  Context const& ctx,
595  FlagKey const& key,
596  std::string default_value) override;
597 
599  Context const& ctx,
600  FlagKey const& key,
601  std::string default_value,
602  hooks::HookContext const& hook_context) override;
603 
604  double DoubleVariation(Context const& ctx,
605  FlagKey const& key,
606  double default_value) override;
607 
608  double DoubleVariation(Context const& ctx,
609  FlagKey const& key,
610  double default_value,
611  hooks::HookContext const& hook_context) override;
612 
614  Context const& ctx,
615  FlagKey const& key,
616  double default_value) override;
617 
619  Context const& ctx,
620  FlagKey const& key,
621  double default_value,
622  hooks::HookContext const& hook_context) override;
623 
624  int IntVariation(Context const& ctx,
625  FlagKey const& key,
626  int default_value) override;
627 
628  int IntVariation(Context const& ctx,
629  FlagKey const& key,
630  int default_value,
631  hooks::HookContext const& hook_context) override;
632 
634  FlagKey const& key,
635  int default_value) override;
636 
638  Context const& ctx,
639  FlagKey const& key,
640  int default_value,
641  hooks::HookContext const& hook_context) override;
642 
643  Value JsonVariation(Context const& ctx,
644  FlagKey const& key,
645  Value default_value) override;
646 
647  Value JsonVariation(Context const& ctx,
648  FlagKey const& key,
649  Value default_value,
650  hooks::HookContext const& hook_context) override;
651 
653  FlagKey const& key,
654  Value default_value) override;
655 
657  Context const& ctx,
658  FlagKey const& key,
659  Value default_value,
660  hooks::HookContext const& hook_context) override;
661 
663 
665 
670  [[nodiscard]] static char const* Version();
671 
672  private:
673  inline static char const* const kVersion =
674  "3.12.0"; // {x-release-please-version}
675  std::unique_ptr<IClient> client;
676 };
677 
678 } // namespace launchdarkly::server_side
Definition: context.hpp:29
Definition: evaluation_detail.hpp:18
Definition: value.hpp:42
Definition: all_flags_state.hpp:27
Options
Definition: all_flags_state.hpp:29
Definition: client.hpp:522
EvaluationDetail< int > IntVariationDetail(Context const &ctx, FlagKey const &key, int default_value) override
Definition: client.cpp:185
bool Initialized() const override
Definition: client.cpp:28
EvaluationDetail< bool > BoolVariationDetail(Context const &ctx, FlagKey const &key, bool default_value) override
Definition: client.cpp:101
void FlushAsync() override
Definition: client.cpp:80
IBigSegmentStoreStatusProvider & BigSegmentStoreStatus() override
Definition: client.cpp:232
std::future< bool > StartAsync() override
Definition: client.cpp:32
bool BoolVariation(Context const &ctx, FlagKey const &key, bool default_value) override
Definition: client.cpp:88
IDataSourceStatusProvider & DataSourceStatus() override
Definition: client.cpp:228
std::string StringVariation(Context const &ctx, FlagKey const &key, std::string default_value) override
Definition: client.cpp:115
Value JsonVariation(Context const &ctx, FlagKey const &key, Value default_value) override
Definition: client.cpp:199
double DoubleVariation(Context const &ctx, FlagKey const &key, double default_value) override
Definition: client.cpp:145
void Identify(Context context) override
Definition: client.cpp:84
EvaluationDetail< std::string > StringVariationDetail(Context const &ctx, FlagKey const &key, std::string default_value) override
Definition: client.cpp:129
EvaluationDetail< double > DoubleVariationDetail(Context const &ctx, FlagKey const &key, double default_value) override
Definition: client.cpp:158
void Track(Context const &ctx, std::string event_name, Value data, double metric_value) override
Definition: client.cpp:43
EvaluationDetail< Value > JsonVariationDetail(Context const &ctx, FlagKey const &key, Value default_value) override
Definition: client.cpp:213
static char const * Version()
Definition: client.cpp:236
int IntVariation(Context const &ctx, FlagKey const &key, int default_value) override
Definition: client.cpp:172
Definition: big_segment_store_status.hpp:43
Definition: client.hpp:23
virtual IDataSourceStatusProvider & DataSourceStatus()=0
virtual void Track(Context const &ctx, std::string event_name, Value data, double metric_value, hooks::HookContext const &hook_context)=0
virtual EvaluationDetail< std::string > StringVariationDetail(Context const &ctx, FlagKey const &key, std::string default_value)=0
virtual double DoubleVariation(Context const &ctx, FlagKey const &key, double default_value, hooks::HookContext const &hook_context)=0
virtual EvaluationDetail< double > DoubleVariationDetail(Context const &ctx, FlagKey const &key, double default_value, hooks::HookContext const &hook_context)=0
virtual IBigSegmentStoreStatusProvider & BigSegmentStoreStatus()=0
virtual std::string StringVariation(Context const &ctx, FlagKey const &key, std::string default_value, hooks::HookContext const &hook_context)=0
virtual std::string StringVariation(Context const &ctx, FlagKey const &key, std::string default_value)=0
virtual void Track(Context const &ctx, std::string event_name, Value data, hooks::HookContext const &hook_context)=0
std::string FlagKey
Definition: client.hpp:28
virtual bool BoolVariation(Context const &ctx, FlagKey const &key, bool default_value)=0
virtual void Track(Context const &ctx, std::string event_name, hooks::HookContext const &hook_context)=0
virtual Value JsonVariation(Context const &ctx, FlagKey const &key, Value default_value)=0
virtual void Track(Context const &ctx, std::string event_name, Value data, double metric_value)=0
virtual EvaluationDetail< int > IntVariationDetail(Context const &ctx, FlagKey const &key, int default_value)=0
virtual EvaluationDetail< int > IntVariationDetail(Context const &ctx, FlagKey const &key, int default_value, hooks::HookContext const &hook_context)=0
virtual void Track(Context const &ctx, std::string event_name, Value data)=0
virtual EvaluationDetail< bool > BoolVariationDetail(Context const &ctx, FlagKey const &key, bool default_value, hooks::HookContext const &hook_context)=0
virtual std::future< bool > StartAsync()=0
virtual int IntVariation(Context const &ctx, FlagKey const &key, int default_value, hooks::HookContext const &hook_context)=0
virtual void Track(Context const &ctx, std::string event_name)=0
virtual int IntVariation(Context const &ctx, FlagKey const &key, int default_value)=0
virtual Value JsonVariation(Context const &ctx, FlagKey const &key, Value default_value, hooks::HookContext const &hook_context)=0
virtual EvaluationDetail< Value > JsonVariationDetail(Context const &ctx, FlagKey const &key, Value default_value, hooks::HookContext const &hook_context)=0
virtual bool BoolVariation(Context const &ctx, FlagKey const &key, bool default_value, hooks::HookContext const &hook_context)=0
virtual EvaluationDetail< double > DoubleVariationDetail(Context const &ctx, FlagKey const &key, double default_value)=0
virtual bool Initialized() const =0
virtual void Identify(Context context)=0
virtual EvaluationDetail< std::string > StringVariationDetail(Context const &ctx, FlagKey const &key, std::string default_value, hooks::HookContext const &hook_context)=0
virtual EvaluationDetail< bool > BoolVariationDetail(Context const &ctx, FlagKey const &key, bool default_value)=0
virtual double DoubleVariation(Context const &ctx, FlagKey const &key, double default_value)=0
virtual EvaluationDetail< Value > JsonVariationDetail(Context const &ctx, FlagKey const &key, Value default_value)=0
Definition: data_source_status.hpp:69
Definition: config.hpp:14