Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
42a776d
base data structures fot hook implementation.
NeaguGeorgiana23 Jul 7, 2026
e968609
fix linter
NeaguGeorgiana23 Jul 7, 2026
334ec2a
fix linter
NeaguGeorgiana23 Jul 7, 2026
f110e5c
Merge branch 'main' into define-hook-data-structures
NeaguGeorgiana23 Jul 7, 2026
5cc878b
Update BUILD file.
NeaguGeorgiana23 Jul 10, 2026
bd66430
Correct include guards.
NeaguGeorgiana23 Jul 10, 2026
5332610
feat: Add HookData class.
NeaguGeorgiana23 Jul 10, 2026
c8fc92d
fix linter
NeaguGeorgiana23 Jul 10, 2026
3f5f4de
fix linter
NeaguGeorgiana23 Jul 10, 2026
b0f3a15
fix linter
NeaguGeorgiana23 Jul 10, 2026
e9e8852
fix linter
NeaguGeorgiana23 Jul 10, 2026
e333df0
add HookContext structure.
NeaguGeorgiana23 Jul 13, 2026
c59de28
fix linter
NeaguGeorgiana23 Jul 13, 2026
45ca64a
fix linter
NeaguGeorgiana23 Jul 13, 2026
3b93d77
add Hooks class.
NeaguGeorgiana23 Jul 14, 2026
a4aa1c2
fix linter.
NeaguGeorgiana23 Jul 14, 2026
d7cd54a
fix linter.
NeaguGeorgiana23 Jul 14, 2026
d6ef2c6
fix linter.
NeaguGeorgiana23 Jul 14, 2026
a2f7fee
fix linter.
NeaguGeorgiana23 Jul 14, 2026
a91afca
appli agent suggestions.
NeaguGeorgiana23 Jul 14, 2026
c0482f7
Merge branch 'main' into hooks
NeaguGeorgiana23 Jul 14, 2026
a0ca155
Merge branch 'main' into hooks
NeaguGeorgiana23 Jul 14, 2026
06bd51c
Add EvaluationOpton struct.
NeaguGeorgiana23 Jul 15, 2026
b362223
fix linter.
NeaguGeorgiana23 Jul 15, 2026
6942c4e
update Provider class to allow getting hooks.
NeaguGeorgiana23 Jul 15, 2026
49bdc17
update all classes that inharit from FeatureProvider.
NeaguGeorgiana23 Jul 15, 2026
dab62a0
update BUILD files and imports.
NeaguGeorgiana23 Jul 15, 2026
ea6a463
update GlobalAPI with hook methods.
NeaguGeorgiana23 Jul 15, 2026
665914a
fix linter.
NeaguGeorgiana23 Jul 16, 2026
0bd0f58
fix linter.
NeaguGeorgiana23 Jul 16, 2026
153fc57
Merge branch 'main' of https://github.com/open-feature/cpp-sdk into u…
NeaguGeorgiana23 Aug 10, 2026
543edd0
Fix linter.
NeaguGeorgiana23 Aug 10, 2026
3e28c56
Update Clint API to support Hooks
NeaguGeorgiana23 Aug 10, 2026
0b6c84b
Overload functions to support EvaluationOptions.
NeaguGeorgiana23 Aug 10, 2026
bdbc5ca
fix linter.
NeaguGeorgiana23 Aug 10, 2026
408322e
fix tests
NeaguGeorgiana23 Aug 10, 2026
c6f2141
Add detailed flag evaluation.
NeaguGeorgiana23 Aug 11, 2026
3a5be12
Merge branch 'main' into detailed_evaluation
NeaguGeorgiana23 Aug 11, 2026
195126d
fix linter
NeaguGeorgiana23 Aug 11, 2026
0d90129
fix linter
NeaguGeorgiana23 Aug 11, 2026
2045c09
Merge branch 'main' of https://github.com/open-feature/cpp-sdk into d…
NeaguGeorgiana23 Aug 11, 2026
7d34e40
Merge branch 'main' into detailed_evaluation
NeaguGeorgiana23 Aug 24, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions openfeature/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ cc_library(
":client",
":evaluation_context",
":features",
":flag_evaluation_details",
":flag_metadata",
":general_hook",
":global_context_manager",
Expand Down Expand Up @@ -121,6 +122,7 @@ cc_library(
deps = [
":evaluation_context",
":evaluation_options",
":flag_evaluation_details",
":value",
],
)
Expand Down
142 changes: 142 additions & 0 deletions openfeature/client_api.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,35 @@ bool ClientAPI::GetBooleanValue(std::string_view flag_key, bool default_value,
return EvaluateBooleanFlag(flag_key, default_value, ctx, options)->GetValue();
}

BoolFlagEvaluationDetails ClientAPI::GetBooleanDetails(
std::string_view flag_key, bool default_value) {
auto res =
EvaluateBooleanFlag(flag_key, default_value, std::nullopt, std::nullopt);
return {std::string(flag_key), *res};
}

BoolFlagEvaluationDetails ClientAPI::GetBooleanDetails(
std::string_view flag_key, bool default_value,
const EvaluationContext& ctx) {
auto res = EvaluateBooleanFlag(flag_key, default_value, ctx, std::nullopt);
return {std::string(flag_key), *res};
}

BoolFlagEvaluationDetails ClientAPI::GetBooleanDetails(
std::string_view flag_key, bool default_value,
const EvaluationOptions& options) {
auto res =
EvaluateBooleanFlag(flag_key, default_value, std::nullopt, options);
return {std::string(flag_key), *res};
}

BoolFlagEvaluationDetails ClientAPI::GetBooleanDetails(
std::string_view flag_key, bool default_value, const EvaluationContext& ctx,
const EvaluationOptions& options) {
auto res = EvaluateBooleanFlag(flag_key, default_value, ctx, options);
return {std::string(flag_key), *res};
}

std::string ClientAPI::GetStringValue(std::string_view flag_key,
std::string_view default_value) {
return EvaluateStringFlag(flag_key, default_value, std::nullopt, std::nullopt)
Expand Down Expand Up @@ -80,6 +109,34 @@ std::string ClientAPI::GetStringValue(std::string_view flag_key,
return EvaluateStringFlag(flag_key, default_value, ctx, options)->GetValue();
}

StringFlagEvaluationDetails ClientAPI::GetStringDetails(
std::string_view flag_key, std::string_view default_value) {
auto res =
EvaluateStringFlag(flag_key, default_value, std::nullopt, std::nullopt);
return {std::string(flag_key), *res};
}

StringFlagEvaluationDetails ClientAPI::GetStringDetails(
std::string_view flag_key, std::string_view default_value,
const EvaluationContext& ctx) {
auto res = EvaluateStringFlag(flag_key, default_value, ctx, std::nullopt);
return {std::string(flag_key), *res};
}

StringFlagEvaluationDetails ClientAPI::GetStringDetails(
std::string_view flag_key, std::string_view default_value,
const EvaluationOptions& options) {
auto res = EvaluateStringFlag(flag_key, default_value, std::nullopt, options);
return {std::string(flag_key), *res};
}

StringFlagEvaluationDetails ClientAPI::GetStringDetails(
std::string_view flag_key, std::string_view default_value,
const EvaluationContext& ctx, const EvaluationOptions& options) {
auto res = EvaluateStringFlag(flag_key, default_value, ctx, options);
return {std::string(flag_key), *res};
}

int64_t ClientAPI::GetIntegerValue(std::string_view flag_key,
int64_t default_value) {
return EvaluateIntegerFlag(flag_key, default_value, std::nullopt,
Expand Down Expand Up @@ -108,6 +165,35 @@ int64_t ClientAPI::GetIntegerValue(std::string_view flag_key,
return EvaluateIntegerFlag(flag_key, default_value, ctx, options)->GetValue();
}

IntFlagEvaluationDetails ClientAPI::GetIntegerDetails(std::string_view flag_key,
int64_t default_value) {
auto res =
EvaluateIntegerFlag(flag_key, default_value, std::nullopt, std::nullopt);
return {std::string(flag_key), *res};
}

IntFlagEvaluationDetails ClientAPI::GetIntegerDetails(
std::string_view flag_key, int64_t default_value,
const EvaluationContext& ctx) {
auto res = EvaluateIntegerFlag(flag_key, default_value, ctx, std::nullopt);
return {std::string(flag_key), *res};
}

IntFlagEvaluationDetails ClientAPI::GetIntegerDetails(
std::string_view flag_key, int64_t default_value,
const EvaluationOptions& options) {
auto res =
EvaluateIntegerFlag(flag_key, default_value, std::nullopt, options);
return {std::string(flag_key), *res};
}

IntFlagEvaluationDetails ClientAPI::GetIntegerDetails(
std::string_view flag_key, int64_t default_value,
const EvaluationContext& ctx, const EvaluationOptions& options) {
auto res = EvaluateIntegerFlag(flag_key, default_value, ctx, options);
return {std::string(flag_key), *res};
}

double ClientAPI::GetDoubleValue(std::string_view flag_key,
double default_value) {
return EvaluateDoubleFlag(flag_key, default_value, std::nullopt, std::nullopt)
Expand Down Expand Up @@ -135,6 +221,34 @@ double ClientAPI::GetDoubleValue(std::string_view flag_key,
return EvaluateDoubleFlag(flag_key, default_value, ctx, options)->GetValue();
}

DoubleFlagEvaluationDetails ClientAPI::GetDoubleDetails(
std::string_view flag_key, double default_value) {
auto res =
EvaluateDoubleFlag(flag_key, default_value, std::nullopt, std::nullopt);
return {std::string(flag_key), *res};
}

DoubleFlagEvaluationDetails ClientAPI::GetDoubleDetails(
std::string_view flag_key, double default_value,
const EvaluationContext& ctx) {
auto res = EvaluateDoubleFlag(flag_key, default_value, ctx, std::nullopt);
return {std::string(flag_key), *res};
}

DoubleFlagEvaluationDetails ClientAPI::GetDoubleDetails(
std::string_view flag_key, double default_value,
const EvaluationOptions& options) {
auto res = EvaluateDoubleFlag(flag_key, default_value, std::nullopt, options);
return {std::string(flag_key), *res};
}

DoubleFlagEvaluationDetails ClientAPI::GetDoubleDetails(
std::string_view flag_key, double default_value,
const EvaluationContext& ctx, const EvaluationOptions& options) {
auto res = EvaluateDoubleFlag(flag_key, default_value, ctx, options);
return {std::string(flag_key), *res};
}

Value ClientAPI::GetObjectValue(std::string_view flag_key,
Value default_value) {
return EvaluateObjectFlag(flag_key, default_value, std::nullopt, std::nullopt)
Expand All @@ -159,6 +273,34 @@ Value ClientAPI::GetObjectValue(std::string_view flag_key, Value default_value,
return EvaluateObjectFlag(flag_key, default_value, ctx, options)->GetValue();
}

ObjectFlagEvaluationDetails ClientAPI::GetObjectDetails(
std::string_view flag_key, Value default_value) {
auto res =
EvaluateObjectFlag(flag_key, default_value, std::nullopt, std::nullopt);
return {std::string(flag_key), *res};
}

ObjectFlagEvaluationDetails ClientAPI::GetObjectDetails(
std::string_view flag_key, Value default_value,
const EvaluationContext& ctx) {
auto res = EvaluateObjectFlag(flag_key, default_value, ctx, std::nullopt);
return {std::string(flag_key), *res};
}

ObjectFlagEvaluationDetails ClientAPI::GetObjectDetails(
std::string_view flag_key, Value default_value,
const EvaluationOptions& options) {
auto res = EvaluateObjectFlag(flag_key, default_value, std::nullopt, options);
return {std::string(flag_key), *res};
}

ObjectFlagEvaluationDetails ClientAPI::GetObjectDetails(
std::string_view flag_key, Value default_value,
const EvaluationContext& ctx, const EvaluationOptions& options) {
auto res = EvaluateObjectFlag(flag_key, default_value, ctx, options);
return {std::string(flag_key), *res};
}

std::unique_ptr<BoolResolutionDetails> ClientAPI::EvaluateBooleanFlag(
std::string_view flag_key, bool default_value,
const std::optional<EvaluationContext>& ctx,
Expand Down
68 changes: 66 additions & 2 deletions openfeature/client_api.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
#include "openfeature/client.h"
#include "openfeature/evaluation_context.h"
#include "openfeature/features.h"
#include "openfeature/flag_evaluation_details.h"
#include "openfeature/general_hook.h"
#include "openfeature/global_context_manager.h"
#include "openfeature/metadata.h"
Expand Down Expand Up @@ -53,6 +54,19 @@ class ClientAPI : public Client {
const EvaluationContext& ctx,
const EvaluationOptions& options) override;

// Detailed boolean flag evaluation.
BoolFlagEvaluationDetails GetBooleanDetails(std::string_view flag_key,
bool default_value) override;
BoolFlagEvaluationDetails GetBooleanDetails(
std::string_view flag_key, bool default_value,
const EvaluationContext& ctx) override;
BoolFlagEvaluationDetails GetBooleanDetails(
std::string_view flag_key, bool default_value,
const EvaluationOptions& options) override;
BoolFlagEvaluationDetails GetBooleanDetails(
std::string_view flag_key, bool default_value,
const EvaluationContext& ctx, const EvaluationOptions& options) override;

// Evaluate a string flag.
std::string GetStringValue(std::string_view flag_key,
std::string_view default_value) override;
Expand All @@ -67,6 +81,19 @@ class ClientAPI : public Client {
const EvaluationContext& ctx,
const EvaluationOptions& options) override;

// Detailed string flag evaluation.
StringFlagEvaluationDetails GetStringDetails(
std::string_view flag_key, std::string_view default_value) override;
StringFlagEvaluationDetails GetStringDetails(
std::string_view flag_key, std::string_view default_value,
const EvaluationContext& ctx) override;
StringFlagEvaluationDetails GetStringDetails(
std::string_view flag_key, std::string_view default_value,
const EvaluationOptions& options) override;
StringFlagEvaluationDetails GetStringDetails(
std::string_view flag_key, std::string_view default_value,
const EvaluationContext& ctx, const EvaluationOptions& options) override;

// Evaluate an integer flag.
int64_t GetIntegerValue(std::string_view flag_key,
int64_t default_value) override;
Expand All @@ -78,6 +105,19 @@ class ClientAPI : public Client {
const EvaluationContext& ctx,
const EvaluationOptions& options) override;

// Detailed integer flag evaluation.
IntFlagEvaluationDetails GetIntegerDetails(std::string_view flag_key,
int64_t default_value) override;
IntFlagEvaluationDetails GetIntegerDetails(
std::string_view flag_key, int64_t default_value,
const EvaluationContext& ctx) override;
IntFlagEvaluationDetails GetIntegerDetails(
std::string_view flag_key, int64_t default_value,
const EvaluationOptions& options) override;
IntFlagEvaluationDetails GetIntegerDetails(
std::string_view flag_key, int64_t default_value,
const EvaluationContext& ctx, const EvaluationOptions& options) override;

// Evaluate a double flag.
double GetDoubleValue(std::string_view flag_key,
double default_value) override;
Expand All @@ -89,6 +129,19 @@ class ClientAPI : public Client {
const EvaluationContext& ctx,
const EvaluationOptions& options) override;

// Detailed double flag evaluation.
DoubleFlagEvaluationDetails GetDoubleDetails(std::string_view flag_key,
double default_value) override;
DoubleFlagEvaluationDetails GetDoubleDetails(
std::string_view flag_key, double default_value,
const EvaluationContext& ctx) override;
DoubleFlagEvaluationDetails GetDoubleDetails(
std::string_view flag_key, double default_value,
const EvaluationOptions& options) override;
DoubleFlagEvaluationDetails GetDoubleDetails(
std::string_view flag_key, double default_value,
const EvaluationContext& ctx, const EvaluationOptions& options) override;

// Evaluate an object flag.
Value GetObjectValue(std::string_view flag_key, Value default_value) override;
Value GetObjectValue(std::string_view flag_key, Value default_value,
Expand All @@ -99,6 +152,19 @@ class ClientAPI : public Client {
const EvaluationContext& ctx,
const EvaluationOptions& options) override;

// Detailed object flag evaluation.
ObjectFlagEvaluationDetails GetObjectDetails(std::string_view flag_key,
Value default_value) override;
ObjectFlagEvaluationDetails GetObjectDetails(
std::string_view flag_key, Value default_value,
const EvaluationContext& ctx) override;
ObjectFlagEvaluationDetails GetObjectDetails(
std::string_view flag_key, Value default_value,
const EvaluationOptions& options) override;
ObjectFlagEvaluationDetails GetObjectDetails(
std::string_view flag_key, Value default_value,
const EvaluationContext& ctx, const EvaluationOptions& options) override;

// Adds one or more hooks to the client-level hook repository.
void AddHooks(std::vector<std::shared_ptr<GeneralHook>> hooks) override;

Expand All @@ -108,8 +174,6 @@ class ClientAPI : public Client {
// Retrieves all configured client-level hooks.
std::vector<std::shared_ptr<GeneralHook>> GetHooks() const override;

// TODO: Add methods for detailed flag evaluation.

private:
template <typename ResolutionDetailsType, typename ValueType,
typename ProviderCallable>
Expand Down
Loading