C++ Server-Side SDK
LaunchDarkly SDK
Loading...
Searching...
No Matches
bucketing.hpp
1#pragma once
2
3#include "evaluation_error.hpp"
4
5#include <launchdarkly/attribute_reference.hpp>
6#include <launchdarkly/context.hpp>
7#include <launchdarkly/data_model/flag.hpp>
8
9#include <tl/expected.hpp>
10
11#include <cstdint>
12#include <limits>
13#include <optional>
14#include <ostream>
15#include <string>
16#include <variant>
17
18namespace launchdarkly::server_side::evaluation {
19
20double const kBucketScale = 100'000.0;
21
22enum RolloutKindLookup {
23 /* The rollout's context kind was found in the supplied evaluation context.
24 */
25 kPresent,
26 /* The rollout's context kind was not found in the supplied evaluation
27 * context. */
28 kAbsent
29};
30
37 public:
38 struct KeyAndSalt {
39 std::string key;
40 std::string salt;
41 };
42
43 using Seed = std::int64_t;
44
49 explicit BucketPrefix(Seed seed);
50
56 BucketPrefix(std::string key, std::string salt);
57
58 friend std::ostream& operator<<(std::ostream& os,
59 BucketPrefix const& prefix);
60
61 private:
62 std::variant<KeyAndSalt, Seed> prefix_;
63};
64
65using ContextHashValue = double;
66
81tl::expected<std::pair<ContextHashValue, RolloutKindLookup>, Error> Bucket(
82 Context const& context,
83 AttributeReference const& by_attr,
84 BucketPrefix const& prefix,
85 bool is_experiment,
86 std::string const& context_kind);
87
89 public:
91 data_model::Flag::Rollout::WeightedVariation weighted_variation,
92 bool is_experiment);
93
94 BucketResult(data_model::Flag::Variation variation, bool in_experiment);
95
96 BucketResult(data_model::Flag::Variation variation);
97
98 [[nodiscard]] std::size_t VariationIndex() const;
99
100 [[nodiscard]] bool InExperiment() const;
101
102 private:
103 std::size_t variation_index_;
104 bool in_experiment_;
105};
106
118tl::expected<BucketResult, Error> Variation(
119 data_model::Flag::VariationOrRollout const& variation_or_rollout,
120 std::string const& flag_key,
121 Context const& context,
122 std::optional<std::string> const& salt);
123
124} // namespace launchdarkly::server_side::evaluation
Definition attribute_reference.hpp:34
Definition context.hpp:29
Definition evaluation_error.hpp:9