C++ Server-Side SDK
LaunchDarkly SDK
hook.hpp
1 #pragma once
2 
3 #include <launchdarkly/context.hpp>
4 #include <launchdarkly/data/evaluation_detail.hpp>
5 #include <launchdarkly/value.hpp>
6 
7 #include <any>
8 #include <map>
9 #include <memory>
10 #include <optional>
11 #include <string>
12 #include <string_view>
13 #include <vector>
14 
15 namespace launchdarkly::server_side::hooks {
16 
33 class HookContext {
34  public:
38  HookContext() = default;
39 
46  HookContext& Set(std::string key, std::shared_ptr<std::any> value);
47 
53  [[nodiscard]] std::optional<std::shared_ptr<std::any>> Get(
54  std::string const& key) const;
55 
61  [[nodiscard]] bool Has(std::string const& key) const;
62 
63  private:
64  std::map<std::string, std::shared_ptr<std::any>> data_;
65 };
66 
73 class HookMetadata {
74  public:
79  explicit HookMetadata(std::string name);
80 
90  [[nodiscard]] std::string_view Name() const;
91 
92  private:
93  std::string name_;
94 };
95 
109  public:
114 
126  [[nodiscard]] std::optional<std::reference_wrapper<Value const>> Get(std::string const& key) const;
127 
146  [[nodiscard]] std::optional<std::shared_ptr<std::any>> GetShared(
147  std::string const& key) const;
148 
154  [[nodiscard]] bool Has(std::string const& key) const;
155 
164  [[nodiscard]] std::vector<std::string> Keys() const;
165 
166  private:
167  friend class EvaluationSeriesDataBuilder;
168 
169  struct DataEntry {
170  std::optional<Value> value;
171  std::optional<std::shared_ptr<std::any>> shared;
172  };
173 
174  explicit EvaluationSeriesData(std::map<std::string, DataEntry> data);
175 
176  std::map<std::string, DataEntry> data_;
177 };
178 
184  public:
190 
195 
202  EvaluationSeriesDataBuilder& Set(std::string key, Value value);
203 
220  EvaluationSeriesDataBuilder& SetShared(std::string key,
221  std::shared_ptr<std::any> value);
222 
227  [[nodiscard]] EvaluationSeriesData Build() const;
228 
229  private:
230  std::map<std::string, EvaluationSeriesData::DataEntry> data_;
231 };
232 
243  public:
253  EvaluationSeriesContext(std::string flag_key,
254  Context const& context,
255  Value default_value,
256  std::string method,
257  HookContext const& hook_context,
258  std::optional<std::string> environment_id);
259 
269  [[nodiscard]] std::string_view FlagKey() const;
270 
280  [[nodiscard]] Context const& EvaluationContext() const;
281 
291  [[nodiscard]] Value const& DefaultValue() const;
292 
303  [[nodiscard]] std::string_view Method() const;
304 
316  [[nodiscard]] std::optional<std::string_view> EnvironmentId() const;
317 
329  [[nodiscard]] HookContext const& HookCtx() const;
330 
331  private:
332  std::string flag_key_;
333  Context const& context_;
334  Value default_value_;
335  std::string method_;
336  HookContext const& hook_context_;
337  std::optional<std::string> environment_id_;
338 };
339 
350  public:
360  TrackSeriesContext(Context const& context,
361  std::string key,
362  std::optional<double> metric_value,
363  std::optional<std::reference_wrapper<Value const>> data,
364  HookContext const& hook_context,
365  std::optional<std::string> environment_id);
366 
376  [[nodiscard]] Context const& TrackContext() const;
377 
387  [[nodiscard]] std::string_view Key() const;
388 
393  [[nodiscard]] std::optional<double> MetricValue() const;
394 
404  [[nodiscard]] std::optional<std::reference_wrapper<Value const>> Data() const;
405 
417  [[nodiscard]] std::optional<std::string_view> EnvironmentId() const;
418 
430  [[nodiscard]] HookContext const& HookCtx() const;
431 
432  private:
433  Context const& context_;
434  std::string key_;
435  std::optional<double> metric_value_;
436  std::optional<std::reference_wrapper<Value const>> data_;
437  HookContext const& hook_context_;
438  std::optional<std::string> environment_id_;
439 };
440 
459 class Hook {
460  public:
461  virtual ~Hook() = default;
462 
467  [[nodiscard]] virtual HookMetadata const& Metadata() const = 0;
468 
478  EvaluationSeriesContext const& series_context,
479  EvaluationSeriesData data);
480 
491  EvaluationSeriesContext const& series_context,
493  EvaluationDetail<Value> const& detail);
494 
501  virtual void AfterTrack(TrackSeriesContext const& series_context);
502 
503  protected:
504  Hook() = default;
505 };
506 
507 } // namespace launchdarkly::server_side::hooks
Definition: context.hpp:29
Definition: evaluation_detail.hpp:18
Definition: value.hpp:42
HookContext const & HookCtx() const
Definition: hook.cpp:139
std::optional< std::string_view > EnvironmentId() const
Definition: hook.cpp:132
Context const & EvaluationContext() const
Definition: hook.cpp:120
EvaluationSeriesContext(std::string flag_key, Context const &context, Value default_value, std::string method, HookContext const &hook_context, std::optional< std::string > environment_id)
Definition: hook.cpp:102
std::string_view Method() const
Definition: hook.cpp:128
Value const & DefaultValue() const
Definition: hook.cpp:124
std::string_view FlagKey() const
Definition: hook.cpp:116
EvaluationSeriesData Build() const
Definition: hook.cpp:96
EvaluationSeriesDataBuilder & Set(std::string key, Value value)
Definition: hook.cpp:79
EvaluationSeriesDataBuilder & SetShared(std::string key, std::shared_ptr< std::any > value)
Definition: hook.cpp:87
std::optional< std::shared_ptr< std::any > > GetShared(std::string const &key) const
Definition: hook.cpp:50
std::vector< std::string > Keys() const
Definition: hook.cpp:62
bool Has(std::string const &key) const
Definition: hook.cpp:58
std::optional< std::reference_wrapper< Value const > > Get(std::string const &key) const
Definition: hook.cpp:43
bool Has(std::string const &key) const
Definition: hook.cpp:23
std::optional< std::shared_ptr< std::any > > Get(std::string const &key) const
Definition: hook.cpp:15
HookContext & Set(std::string key, std::shared_ptr< std::any > value)
Definition: hook.cpp:9
HookMetadata(std::string name)
Definition: hook.cpp:29
std::string_view Name() const
Definition: hook.cpp:31
virtual HookMetadata const & Metadata() const =0
virtual EvaluationSeriesData AfterEvaluation(EvaluationSeriesContext const &series_context, EvaluationSeriesData data, EvaluationDetail< Value > const &detail)
Definition: hook.cpp:194
virtual void AfterTrack(TrackSeriesContext const &series_context)
Definition: hook.cpp:201
virtual EvaluationSeriesData BeforeEvaluation(EvaluationSeriesContext const &series_context, EvaluationSeriesData data)
Definition: hook.cpp:188
std::optional< std::reference_wrapper< Value const > > Data() const
Definition: hook.cpp:171
TrackSeriesContext(Context const &context, std::string key, std::optional< double > metric_value, std::optional< std::reference_wrapper< Value const >> data, HookContext const &hook_context, std::optional< std::string > environment_id)
Definition: hook.cpp:145
HookContext const & HookCtx() const
Definition: hook.cpp:182
std::optional< std::string_view > EnvironmentId() const
Definition: hook.cpp:175
std::optional< double > MetricValue() const
Definition: hook.cpp:167
Context const & TrackContext() const
Definition: hook.cpp:159
std::string_view Key() const
Definition: hook.cpp:163