diff --git a/src/OpenFeature.Contrib.ConfigCat/ConfigCatProvider.cs b/src/OpenFeature.Contrib.ConfigCat/ConfigCatProvider.cs index d694ac24..e03f1771 100644 --- a/src/OpenFeature.Contrib.ConfigCat/ConfigCatProvider.cs +++ b/src/OpenFeature.Contrib.ConfigCat/ConfigCatProvider.cs @@ -58,10 +58,12 @@ public override Task> ResolveDoubleValue(string flagKe } /// - public override Task> ResolveStructureValue(string flagKey, Value defaultValue, EvaluationContext context = null) + public override async Task> ResolveStructureValue(string flagKey, Value defaultValue, EvaluationContext context = null) { - throw new NotSupportedException( - "ConfigCat does not support structure values. Use JSON string instead."); + var stringDefaultValue = defaultValue?.AsString; + var result = await ProcessFlag(flagKey, context, stringDefaultValue); + var returnValue = result.Value == null ? defaultValue : new Value(result.Value); + return new ResolutionDetails(flagKey, returnValue, variant: result.Variant, errorMessage: result.ErrorMessage); } private async Task> ProcessFlag(string flagKey, EvaluationContext context, T defaultValue) diff --git a/test/OpenFeature.Contrib.ConfigCat.Test/ConfigCatProviderTest.cs b/test/OpenFeature.Contrib.ConfigCat.Test/ConfigCatProviderTest.cs index 79b59a4e..c88e0e91 100644 --- a/test/OpenFeature.Contrib.ConfigCat.Test/ConfigCatProviderTest.cs +++ b/test/OpenFeature.Contrib.ConfigCat.Test/ConfigCatProviderTest.cs @@ -59,6 +59,22 @@ public Task GetIntValue_ForFeature_ReturnExpectedResult(object value, int defaul return ExecuteResolveTest(value, defaultValue, expectedValue, expectedErrorType, sdkKey, (provider, key, def) => provider.ResolveIntegerValue(key, def)); } + [Theory] + [AutoData] + public async Task GetStructureValue_ForFeature_ReturnExpectedResult(string sdkKey) + { + const string jsonValue = "{ \"key\": \"value\" }"; + var defaultValue = new Value(jsonValue); + var configCatProvider = new ConfigCatProvider(sdkKey, + options => { options.FlagOverrides = BuildFlagOverrides(("example-feature", defaultValue)); }); + + var result = await configCatProvider.ResolveStructureValue( "example-feature", defaultValue); + + Assert.Equal(defaultValue.AsString, result.Value.AsString); + Assert.Equal("example-feature", result.FlagKey); + Assert.Equal(ErrorType.None, result.ErrorType); + } + private static async Task ExecuteResolveTest(object value, T defaultValue, T expectedValue, ErrorType expectedErrorType, string sdkKey, Func>> resolveFunc) { var configCatProvider = new ConfigCatProvider(sdkKey,