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/data_source_status.hpp>
11 
12 #include <chrono>
13 #include <future>
14 #include <memory>
15 #include <string>
16 #include <unordered_map>
17 
18 namespace launchdarkly::server_side {
22 class IClient {
23  public:
27  using FlagKey = std::string;
28 
51  virtual std::future<bool> StartAsync() = 0;
52 
71  [[nodiscard]] virtual bool Initialized() const = 0;
72 
91  [[nodiscard]] virtual class AllFlagsState AllFlagsState(
92  Context const& context,
94 
106  virtual void Track(Context const& ctx,
107  std::string event_name,
108  Value data,
109  double metric_value) = 0;
110 
126  virtual void Track(Context const& ctx,
127  std::string event_name,
128  Value data,
129  double metric_value,
130  hooks::HookContext const& hook_context) = 0;
131 
140  virtual void Track(Context const& ctx,
141  std::string event_name,
142  Value data) = 0;
143 
156  virtual void Track(Context const& ctx,
157  std::string event_name,
158  Value data,
159  hooks::HookContext const& hook_context) = 0;
160 
167  virtual void Track(Context const& ctx, std::string event_name) = 0;
168 
179  virtual void Track(Context const& ctx,
180  std::string event_name,
181  hooks::HookContext const& hook_context) = 0;
182 
187  virtual void FlushAsync() = 0;
188 
195  virtual void Identify(Context context) = 0;
196 
205  virtual bool BoolVariation(Context const& ctx,
206  FlagKey const& key,
207  bool default_value) = 0;
208 
221  virtual bool BoolVariation(Context const& ctx,
222  FlagKey const& key,
223  bool default_value,
224  hooks::HookContext const& hook_context) = 0;
225 
235  FlagKey const& key,
236  bool default_value) = 0;
237 
251  Context const& ctx,
252  FlagKey const& key,
253  bool default_value,
254  hooks::HookContext const& hook_context) = 0;
255 
264  virtual std::string StringVariation(Context const& ctx,
265  FlagKey const& key,
266  std::string default_value) = 0;
267 
280  virtual std::string StringVariation(Context const& ctx,
281  FlagKey const& key,
282  std::string default_value,
283  hooks::HookContext const& hook_context) = 0;
284 
294  Context const& ctx,
295  FlagKey const& key,
296  std::string default_value) = 0;
297 
311  Context const& ctx,
312  FlagKey const& key,
313  std::string default_value,
314  hooks::HookContext const& hook_context) = 0;
315 
324  virtual double DoubleVariation(Context const& ctx,
325  FlagKey const& key,
326  double default_value) = 0;
327 
340  virtual double DoubleVariation(Context const& ctx,
341  FlagKey const& key,
342  double default_value,
343  hooks::HookContext const& hook_context) = 0;
344 
354  Context const& ctx,
355  FlagKey const& key,
356  double default_value) = 0;
357 
371  Context const& ctx,
372  FlagKey const& key,
373  double default_value,
374  hooks::HookContext const& hook_context) = 0;
375 
384  virtual int IntVariation(Context const& ctx,
385  FlagKey const& key,
386  int default_value) = 0;
387 
400  virtual int IntVariation(Context const& ctx,
401  FlagKey const& key,
402  int default_value,
403  hooks::HookContext const& hook_context) = 0;
404 
414  FlagKey const& key,
415  int default_value) = 0;
416 
430  Context const& ctx,
431  FlagKey const& key,
432  int default_value,
433  hooks::HookContext const& hook_context) = 0;
434 
443  virtual Value JsonVariation(Context const& ctx,
444  FlagKey const& key,
445  Value default_value) = 0;
446 
459  virtual Value JsonVariation(Context const& ctx,
460  FlagKey const& key,
461  Value default_value,
462  hooks::HookContext const& hook_context) = 0;
463 
473  Context const& ctx,
474  FlagKey const& key,
475  Value default_value) = 0;
476 
490  Context const& ctx,
491  FlagKey const& key,
492  Value default_value,
493  hooks::HookContext const& hook_context) = 0;
494 
501 
502  virtual ~IClient() = default;
503  IClient(IClient const& item) = delete;
504  IClient(IClient&& item) = delete;
505  IClient& operator=(IClient const&) = delete;
506  IClient& operator=(IClient&&) = delete;
507 
508  protected:
509  IClient() = default;
510 };
511 
512 class Client : public IClient {
513  public:
514  Client(Config config);
515 
516  std::future<bool> StartAsync() override;
517 
518  [[nodiscard]] bool Initialized() const override;
519 
520  using FlagKey = std::string;
521  [[nodiscard]] class AllFlagsState AllFlagsState(
522  Context const& context,
523  enum AllFlagsState::Options options =
525 
526  void Track(Context const& ctx,
527  std::string event_name,
528  Value data,
529  double metric_value) override;
530 
531  void Track(Context const& ctx,
532  std::string event_name,
533  Value data,
534  double metric_value,
535  hooks::HookContext const& hook_context) override;
536 
537  void Track(Context const& ctx, std::string event_name, Value data) override;
538 
539  void Track(Context const& ctx,
540  std::string event_name,
541  Value data,
542  hooks::HookContext const& hook_context) override;
543 
544  void Track(Context const& ctx, std::string event_name) override;
545 
546  void Track(Context const& ctx,
547  std::string event_name,
548  hooks::HookContext const& hook_context) override;
549 
550  void FlushAsync() override;
551 
552  void Identify(Context context) override;
553 
554  bool BoolVariation(Context const& ctx,
555  FlagKey const& key,
556  bool default_value) override;
557 
558  bool BoolVariation(Context const& ctx,
559  FlagKey const& key,
560  bool default_value,
561  hooks::HookContext const& hook_context) override;
562 
564  FlagKey const& key,
565  bool default_value) override;
566 
568  Context const& ctx,
569  FlagKey const& key,
570  bool default_value,
571  hooks::HookContext const& hook_context) override;
572 
573  std::string StringVariation(Context const& ctx,
574  FlagKey const& key,
575  std::string default_value) override;
576 
577  std::string StringVariation(Context const& ctx,
578  FlagKey const& key,
579  std::string default_value,
580  hooks::HookContext const& hook_context) override;
581 
583  Context const& ctx,
584  FlagKey const& key,
585  std::string default_value) override;
586 
588  Context const& ctx,
589  FlagKey const& key,
590  std::string default_value,
591  hooks::HookContext const& hook_context) override;
592 
593  double DoubleVariation(Context const& ctx,
594  FlagKey const& key,
595  double default_value) override;
596 
597  double DoubleVariation(Context const& ctx,
598  FlagKey const& key,
599  double default_value,
600  hooks::HookContext const& hook_context) override;
601 
603  Context const& ctx,
604  FlagKey const& key,
605  double default_value) override;
606 
608  Context const& ctx,
609  FlagKey const& key,
610  double default_value,
611  hooks::HookContext const& hook_context) override;
612 
613  int IntVariation(Context const& ctx,
614  FlagKey const& key,
615  int default_value) override;
616 
617  int IntVariation(Context const& ctx,
618  FlagKey const& key,
619  int default_value,
620  hooks::HookContext const& hook_context) override;
621 
623  FlagKey const& key,
624  int default_value) override;
625 
627  Context const& ctx,
628  FlagKey const& key,
629  int default_value,
630  hooks::HookContext const& hook_context) override;
631 
632  Value JsonVariation(Context const& ctx,
633  FlagKey const& key,
634  Value default_value) override;
635 
636  Value JsonVariation(Context const& ctx,
637  FlagKey const& key,
638  Value default_value,
639  hooks::HookContext const& hook_context) override;
640 
642  FlagKey const& key,
643  Value default_value) override;
644 
646  Context const& ctx,
647  FlagKey const& key,
648  Value default_value,
649  hooks::HookContext const& hook_context) override;
650 
652 
657  [[nodiscard]] static char const* Version();
658 
659  private:
660  inline static char const* const kVersion =
661  "3.10.1"; // {x-release-please-version}
662  std::unique_ptr<IClient> client;
663 };
664 
665 } // 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:512
EvaluationDetail< int > IntVariationDetail(Context const &ctx, FlagKey const &key, int default_value) override
Definition: client.cpp:186
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
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:229
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:200
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:214
static char const * Version()
Definition: client.cpp:233
int IntVariation(Context const &ctx, FlagKey const &key, int default_value) override
Definition: client.cpp:173
Definition: client.hpp:22
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 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:27
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:12