Skip to content

Commit 0feff69

Browse files
committed
Implement Stucture with JSON string
1 parent 263705e commit 0feff69

File tree

2 files changed

+21
-3
lines changed

2 files changed

+21
-3
lines changed

Diff for: src/OpenFeature.Contrib.ConfigCat/ConfigCatProvider.cs

+5-3
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,12 @@ public override Task<ResolutionDetails<double>> ResolveDoubleValue(string flagKe
5858
}
5959

6060
/// <inheritdoc/>
61-
public override Task<ResolutionDetails<Value>> ResolveStructureValue(string flagKey, Value defaultValue, EvaluationContext context = null)
61+
public override async Task<ResolutionDetails<Value>> ResolveStructureValue(string flagKey, Value defaultValue, EvaluationContext context = null)
6262
{
63-
throw new NotSupportedException(
64-
"ConfigCat does not support structure values. Use JSON string instead.");
63+
var stringDefaultValue = defaultValue?.AsString;
64+
var result = await ProcessFlag(flagKey, context, stringDefaultValue);
65+
var returnValue = result.Value == null ? defaultValue : new Value(result.Value);
66+
return new ResolutionDetails<Value>(flagKey, returnValue, variant: result.Variant, errorMessage: result.ErrorMessage);
6567
}
6668

6769
private async Task<ResolutionDetails<T>> ProcessFlag<T>(string flagKey, EvaluationContext context, T defaultValue)

Diff for: test/OpenFeature.Contrib.ConfigCat.Test/ConfigCatProviderTest.cs

+16
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,22 @@ public Task GetIntValue_ForFeature_ReturnExpectedResult(object value, int defaul
5959
return ExecuteResolveTest(value, defaultValue, expectedValue, expectedErrorType, sdkKey, (provider, key, def) => provider.ResolveIntegerValue(key, def));
6060
}
6161

62+
[Theory]
63+
[AutoData]
64+
public async Task GetStructureValue_ForFeature_ReturnExpectedResult(string sdkKey)
65+
{
66+
const string jsonValue = "{ \"key\": \"value\" }";
67+
var defaultValue = new Value(jsonValue);
68+
var configCatProvider = new ConfigCatProvider(sdkKey,
69+
options => { options.FlagOverrides = BuildFlagOverrides(("example-feature", defaultValue)); });
70+
71+
var result = await configCatProvider.ResolveStructureValue( "example-feature", defaultValue);
72+
73+
Assert.Equal(defaultValue.AsString, result.Value.AsString);
74+
Assert.Equal("example-feature", result.FlagKey);
75+
Assert.Equal(ErrorType.None, result.ErrorType);
76+
}
77+
6278
private static async Task ExecuteResolveTest<T>(object value, T defaultValue, T expectedValue, ErrorType expectedErrorType, string sdkKey, Func<ConfigCatProvider, string, T, Task<ResolutionDetails<T>>> resolveFunc)
6379
{
6480
var configCatProvider = new ConfigCatProvider(sdkKey,

0 commit comments

Comments
 (0)