Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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: 1 addition & 1 deletion .github/workflows/ci-format-test-lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ jobs:
tidy-checks: "" # Use .clang-tidy config file.
database: "compile_commands.json"
version: "21"
extra-args: "--system-headers -fdiagnostics-absolute-paths"
extra-args: "-fdiagnostics-absolute-paths"

- name: Fail fast?!
if: steps.linter.outputs.checks-failed > 0
Expand Down
2 changes: 1 addition & 1 deletion MODULE.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ bazel_dep(name = "abseil-cpp", version = "20250814.2")
bazel_dep(name = "openfeature_cpp_sdk")
git_override(
module_name = "openfeature_cpp_sdk",
branch = "main",
remote = "https://github.com/open-feature/cpp-sdk.git",
tag = "v0.1.2",
)

# Hedron's Compile Commands Extractor for Bazel
Expand Down
11 changes: 6 additions & 5 deletions providers/flagd/src/provider.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,13 @@
#include <cstdint>
#include <memory>
#include <optional>
#include <string>

Check failure on line 6 in providers/flagd/src/provider.cpp

View workflow job for this annotation

GitHub Actions / lint

providers/flagd/src/provider.cpp:6:1 [misc-include-cleaner]

included header string is not used directly
#include <string_view>
#include <utility>

#include "absl/log/log.h"
#include "absl/status/status.h"
#include "absl/status/statusor.h"

Check failure on line 12 in providers/flagd/src/provider.cpp

View workflow job for this annotation

GitHub Actions / lint

providers/flagd/src/provider.cpp:12:1 [misc-include-cleaner]

included header statusor.h is not used directly
#include "flagd/configuration.h"
#include "flagd/evaluator/evaluator.h"
#include "flagd/sync/grpc/grpc_sync.h"
Expand Down Expand Up @@ -80,7 +81,7 @@
return status;
}

std::unique_ptr<openfeature::BoolResolutionDetails>
absl::StatusOr<std::unique_ptr<openfeature::BoolResolutionDetails>>
FlagdProvider::GetBooleanEvaluation(const std::string_view flag,
bool default_value,
const openfeature::EvaluationContext& ctx) {
Expand All @@ -93,7 +94,7 @@
return evaluator_->ResolveBoolean(flag, default_value, ctx);
}

std::unique_ptr<openfeature::StringResolutionDetails>
absl::StatusOr<std::unique_ptr<openfeature::StringResolutionDetails>>
FlagdProvider::GetStringEvaluation(const std::string_view flag,
std::string_view default_value,
const openfeature::EvaluationContext& ctx) {
Expand All @@ -106,7 +107,7 @@
return evaluator_->ResolveString(flag, default_value, ctx);
}

std::unique_ptr<openfeature::IntResolutionDetails>
absl::StatusOr<std::unique_ptr<openfeature::IntResolutionDetails>>
FlagdProvider::GetIntegerEvaluation(const std::string_view flag,
int64_t default_value,
const openfeature::EvaluationContext& ctx) {
Expand All @@ -119,7 +120,7 @@
return evaluator_->ResolveInteger(flag, default_value, ctx);
}

std::unique_ptr<openfeature::DoubleResolutionDetails>
absl::StatusOr<std::unique_ptr<openfeature::DoubleResolutionDetails>>
FlagdProvider::GetDoubleEvaluation(const std::string_view flag,
double default_value,
const openfeature::EvaluationContext& ctx) {
Expand All @@ -132,7 +133,7 @@
return evaluator_->ResolveDouble(flag, default_value, ctx);
}

std::unique_ptr<openfeature::ObjectResolutionDetails>
absl::StatusOr<std::unique_ptr<openfeature::ObjectResolutionDetails>>
FlagdProvider::GetObjectEvaluation(
const std::string_view flag,
openfeature::Value
Expand Down
31 changes: 16 additions & 15 deletions providers/flagd/src/provider.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
#include <memory>

#include "absl/status/status.h"
#include "absl/status/statusor.h"
#include "flagd/configuration.h"
#include "flagd/evaluator/evaluator.h"
#include "flagd/sync/sync.h"
Expand All @@ -29,25 +30,25 @@ class FlagdProvider : public openfeature::FeatureProvider {
absl::Status Init(const openfeature::EvaluationContext& ctx) override;
absl::Status Shutdown() override;

std::unique_ptr<openfeature::BoolResolutionDetails> GetBooleanEvaluation(
std::string_view flag, bool default_value,
const openfeature::EvaluationContext& ctx) override;
absl::StatusOr<std::unique_ptr<openfeature::BoolResolutionDetails>>
GetBooleanEvaluation(std::string_view flag, bool default_value,
const openfeature::EvaluationContext& ctx) override;

std::unique_ptr<openfeature::StringResolutionDetails> GetStringEvaluation(
std::string_view flag, std::string_view default_value,
const openfeature::EvaluationContext& ctx) override;
absl::StatusOr<std::unique_ptr<openfeature::StringResolutionDetails>>
GetStringEvaluation(std::string_view flag, std::string_view default_value,
const openfeature::EvaluationContext& ctx) override;

std::unique_ptr<openfeature::IntResolutionDetails> GetIntegerEvaluation(
std::string_view flag, int64_t default_value,
const openfeature::EvaluationContext& ctx) override;
absl::StatusOr<std::unique_ptr<openfeature::IntResolutionDetails>>
GetIntegerEvaluation(std::string_view flag, int64_t default_value,
const openfeature::EvaluationContext& ctx) override;

std::unique_ptr<openfeature::DoubleResolutionDetails> GetDoubleEvaluation(
std::string_view flag, double default_value,
const openfeature::EvaluationContext& ctx) override;
absl::StatusOr<std::unique_ptr<openfeature::DoubleResolutionDetails>>
GetDoubleEvaluation(std::string_view flag, double default_value,
const openfeature::EvaluationContext& ctx) override;

std::unique_ptr<openfeature::ObjectResolutionDetails> GetObjectEvaluation(
std::string_view flag, openfeature::Value default_value,
const openfeature::EvaluationContext& ctx) override;
absl::StatusOr<std::unique_ptr<openfeature::ObjectResolutionDetails>>
GetObjectEvaluation(std::string_view flag, openfeature::Value default_value,
const openfeature::EvaluationContext& ctx) override;

private:
FlagdProviderConfig configuration_;
Expand Down
1 change: 1 addition & 0 deletions providers/flagd/tests/.clang-tidy
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,5 @@ InheritParentConfig: true
Checks: "
-readability-magic-numbers,
-readability-implicit-bool-conversion,
-misc-include-cleaner,
"
47 changes: 23 additions & 24 deletions providers/flagd/tests/provider_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -61,13 +61,13 @@ TEST(ProviderTest, ReturnsNotReadyBeforeInit) {

FlagdProvider provider(mock_sync, std::move(mock_evaluator));

std::unique_ptr<openfeature::BoolResolutionDetails> result =
provider.GetBooleanEvaluation(
"some-flag", false,
openfeature::EvaluationContext::Builder().build());
auto result = provider.GetBooleanEvaluation(
"some-flag", false, openfeature::EvaluationContext::Builder().build());

EXPECT_EQ(result->GetErrorCode(), openfeature::ErrorCode::kProviderNotReady);
EXPECT_EQ(result->GetReason(), openfeature::Reason::kError);
ASSERT_TRUE(result.ok());
EXPECT_EQ((*result)->GetErrorCode(),
openfeature::ErrorCode::kProviderNotReady);
EXPECT_EQ((*result)->GetReason(), openfeature::Reason::kError);
}

TEST(ProviderTest, ReturnsReadyAfterInit) {
Expand All @@ -87,13 +87,12 @@ TEST(ProviderTest, ReturnsReadyAfterInit) {
FlagdProvider provider(mock_sync, std::move(mock_evaluator));
(void)provider.Init(openfeature::EvaluationContext::Builder().build());

std::unique_ptr<openfeature::BoolResolutionDetails> result =
provider.GetBooleanEvaluation(
"some-flag", false,
openfeature::EvaluationContext::Builder().build());
auto result = provider.GetBooleanEvaluation(
"some-flag", false, openfeature::EvaluationContext::Builder().build());

EXPECT_EQ(result->GetValue(), true);
EXPECT_EQ(result->GetReason(), openfeature::Reason::kStatic);
ASSERT_TRUE(result.ok());
EXPECT_EQ((*result)->GetValue(), true);
EXPECT_EQ((*result)->GetReason(), openfeature::Reason::kStatic);
}

TEST(ProviderTest, DelegationWorks) {
Expand All @@ -118,13 +117,13 @@ TEST(ProviderTest, DelegationWorks) {
FlagdProvider provider(mock_sync, std::move(mock_evaluator));
(void)provider.Init(openfeature::EvaluationContext::Builder().build());

std::unique_ptr<openfeature::BoolResolutionDetails> result =
provider.GetBooleanEvaluation(
expected_flag, expected_default,
openfeature::EvaluationContext::Builder().build());
auto result = provider.GetBooleanEvaluation(
expected_flag, expected_default,
openfeature::EvaluationContext::Builder().build());

EXPECT_EQ(result->GetValue(), expected_default);
EXPECT_EQ(result->GetReason(), openfeature::Reason::kDefault);
ASSERT_TRUE(result.ok());
EXPECT_EQ((*result)->GetValue(), expected_default);
EXPECT_EQ((*result)->GetReason(), openfeature::Reason::kDefault);
}

TEST(ProviderTest, ShutdownMakesProviderNotReady) {
Expand All @@ -138,13 +137,13 @@ TEST(ProviderTest, ShutdownMakesProviderNotReady) {
(void)provider.Init(openfeature::EvaluationContext::Builder().build());
(void)provider.Shutdown();

std::unique_ptr<openfeature::BoolResolutionDetails> result =
provider.GetBooleanEvaluation(
"some-flag", false,
openfeature::EvaluationContext::Builder().build());
auto result = provider.GetBooleanEvaluation(
"some-flag", false, openfeature::EvaluationContext::Builder().build());

EXPECT_EQ(result->GetErrorCode(), openfeature::ErrorCode::kProviderNotReady);
EXPECT_EQ(result->GetReason(), openfeature::Reason::kError);
ASSERT_TRUE(result.ok());
EXPECT_EQ((*result)->GetErrorCode(),
openfeature::ErrorCode::kProviderNotReady);
EXPECT_EQ((*result)->GetReason(), openfeature::Reason::kError);
}

} // namespace flagd
Loading