diff --git a/openfeature/BUILD b/openfeature/BUILD index fcd4d58..7283fc5 100644 --- a/openfeature/BUILD +++ b/openfeature/BUILD @@ -234,6 +234,7 @@ cc_library( hdrs = ["noop_provider.h"], include_prefix = "openfeature", deps = [ + ":general_hook", ":evaluation_context", ":metadata", ":provider", @@ -282,6 +283,7 @@ cc_library( deps = [ "@abseil-cpp//absl/status", "@abseil-cpp//absl/status:statusor", + ":general_hook", ":evaluation_context", ":metadata", ":resolution_details", diff --git a/openfeature/memory_provider/BUILD b/openfeature/memory_provider/BUILD index 99dbd0b..1a5e6dd 100644 --- a/openfeature/memory_provider/BUILD +++ b/openfeature/memory_provider/BUILD @@ -21,6 +21,7 @@ cc_library( hdrs = ["in_memory_provider.h"], include_prefix = "openfeature", deps = [ + "//openfeature:general_hook", "//openfeature:error_code", "//openfeature:evaluation_context", ":flag", diff --git a/openfeature/memory_provider/in_memory_provider.cpp b/openfeature/memory_provider/in_memory_provider.cpp index a48df05..25e287b 100644 --- a/openfeature/memory_provider/in_memory_provider.cpp +++ b/openfeature/memory_provider/in_memory_provider.cpp @@ -6,6 +6,7 @@ #include "absl/status/statusor.h" #include "openfeature/error_code.h" +#include "openfeature/general_hook.h" #include "openfeature/memory_provider/flag.h" #include "openfeature/reason.h" @@ -21,6 +22,10 @@ Metadata InMemoryProvider::GetMetadata() const { return Metadata{std::string(kName)}; } +std::vector> InMemoryProvider::GetHooks() const { + return {}; +} + absl::Status InMemoryProvider::Init(const EvaluationContext& ctx) { { std::unique_lock lock(mutex_); diff --git a/openfeature/memory_provider/in_memory_provider.h b/openfeature/memory_provider/in_memory_provider.h index 484d0a3..349d9ce 100644 --- a/openfeature/memory_provider/in_memory_provider.h +++ b/openfeature/memory_provider/in_memory_provider.h @@ -11,6 +11,7 @@ #include "absl/status/status.h" #include "absl/status/statusor.h" #include "openfeature/evaluation_context.h" +#include "openfeature/general_hook.h" #include "openfeature/metadata.h" #include "openfeature/provider.h" #include "openfeature/provider_status.h" @@ -44,6 +45,8 @@ class InMemoryProvider : public FeatureProvider { // will be added to the configuration. void UpdateFlag(std::string key, std::any new_flag); + std::vector> GetHooks() const override; + absl::StatusOr> GetBooleanEvaluation( std::string_view key, bool default_value, const EvaluationContext& ctx) override; diff --git a/openfeature/noop_provider.cpp b/openfeature/noop_provider.cpp index 5b067f0..a6f56a2 100644 --- a/openfeature/noop_provider.cpp +++ b/openfeature/noop_provider.cpp @@ -4,6 +4,10 @@ namespace openfeature { Metadata NoopProvider::GetMetadata() const { return Metadata{name_}; } +std::vector> NoopProvider::GetHooks() const { + return {}; +} + absl::StatusOr> NoopProvider::GetBooleanEvaluation(std::string_view flag, bool default_value, const EvaluationContext& ctx) { diff --git a/openfeature/noop_provider.h b/openfeature/noop_provider.h index a8ebf6b..05e53aa 100644 --- a/openfeature/noop_provider.h +++ b/openfeature/noop_provider.h @@ -7,6 +7,7 @@ #include "absl/status/statusor.h" #include "openfeature/evaluation_context.h" +#include "openfeature/general_hook.h" #include "openfeature/metadata.h" #include "openfeature/provider.h" #include "openfeature/resolution_details.h" @@ -23,6 +24,9 @@ class NoopProvider : public FeatureProvider { // Metadata returns the metadata of the provider. Metadata GetMetadata() const override; + // GetHooks returns an empty vector of hooks. + std::vector> GetHooks() const override; + // BooleanEvaluation returns a boolean flag. absl::StatusOr> GetBooleanEvaluation( std::string_view flag, bool default_value, diff --git a/openfeature/provider.h b/openfeature/provider.h index 50fcdcb..6909aa8 100644 --- a/openfeature/provider.h +++ b/openfeature/provider.h @@ -3,10 +3,12 @@ #include #include +#include #include "absl/status/status.h" #include "absl/status/statusor.h" #include "openfeature/evaluation_context.h" +#include "openfeature/general_hook.h" #include "openfeature/metadata.h" #include "openfeature/resolution_details.h" #include "openfeature/value.h" @@ -24,6 +26,9 @@ class FeatureProvider { public: virtual ~FeatureProvider() = default; virtual Metadata GetMetadata() const = 0; + virtual std::vector> GetHooks() const { + return {}; + }; virtual absl::StatusOr> GetBooleanEvaluation(std::string_view flag, bool default_value, const EvaluationContext& ctx) = 0; diff --git a/test/BUILD b/test/BUILD index e24633d..fcbeca4 100644 --- a/test/BUILD +++ b/test/BUILD @@ -8,6 +8,7 @@ cc_library( name = "mock_feature_provider", hdrs = ["mocks/mock_feature_provider.h"], deps = [ + "//openfeature:general_hook", "//openfeature:provider", "@googletest//:gtest", ], diff --git a/test/mocks/mock_feature_provider.h b/test/mocks/mock_feature_provider.h index 74e7ad7..d8b3476 100644 --- a/test/mocks/mock_feature_provider.h +++ b/test/mocks/mock_feature_provider.h @@ -3,6 +3,11 @@ #include +#include +#include +#include + +#include "openfeature/general_hook.h" #include "openfeature/provider.h" namespace openfeature { @@ -11,6 +16,8 @@ namespace openfeature { class MockFeatureProvider : public FeatureProvider { public: MOCK_METHOD(Metadata, GetMetadata, (), (const, override)); + MOCK_METHOD(std::vector>, GetHooks, (), + (const, override)); MOCK_METHOD(absl::StatusOr>, GetBooleanEvaluation, (std::string_view flag, bool default_value,