10
10
using System . Threading . Tasks ;
11
11
using OpenFeature . Constant ;
12
12
using OpenFeature . Contrib . Providers . GOFeatureFlag . exception ;
13
+ using OpenFeature . Contrib . Providers . GOFeatureFlag . helpers ;
13
14
using OpenFeature . Model ;
14
15
15
16
namespace OpenFeature . Contrib . Providers . GOFeatureFlag
@@ -97,7 +98,8 @@ public override async Task<ResolutionDetails<bool>> ResolveBooleanValueAsync(str
97
98
{
98
99
var resp = await CallApi ( flagKey , defaultValue , context ) ;
99
100
return new ResolutionDetails < bool > ( flagKey , bool . Parse ( resp . value . ToString ( ) ) , ErrorType . None ,
100
- resp . reason , resp . variationType ) ;
101
+ resp . reason , resp . variationType , null ,
102
+ resp . metadata == null ? null : new ImmutableMetadata ( resp . metadata ) ) ;
101
103
}
102
104
catch ( FormatException e )
103
105
{
@@ -121,7 +123,8 @@ public override async Task<ResolutionDetails<bool>> ResolveBooleanValueAsync(str
121
123
/// <exception cref="FlagNotFoundError">If the flag does not exists</exception>
122
124
/// <exception cref="GeneralError">If an unknown error happen</exception>
123
125
/// <exception cref="FlagDisabled">If the flag is disabled</exception>
124
- public override async Task < ResolutionDetails < string > > ResolveStringValueAsync ( string flagKey , string defaultValue ,
126
+ public override async Task < ResolutionDetails < string > > ResolveStringValueAsync ( string flagKey ,
127
+ string defaultValue ,
125
128
EvaluationContext context = null , CancellationToken cancellationToken = default )
126
129
{
127
130
try
@@ -130,7 +133,7 @@ public override async Task<ResolutionDetails<string>> ResolveStringValueAsync(st
130
133
if ( ! ( resp . value is JsonElement element && element . ValueKind == JsonValueKind . String ) )
131
134
throw new TypeMismatchError ( $ "flag value { flagKey } had unexpected type") ;
132
135
return new ResolutionDetails < string > ( flagKey , resp . value . ToString ( ) , ErrorType . None , resp . reason ,
133
- resp . variationType ) ;
136
+ resp . variationType , null , resp . metadata == null ? null : new ImmutableMetadata ( resp . metadata ) ) ;
134
137
}
135
138
catch ( FormatException e )
136
139
{
@@ -161,7 +164,8 @@ public override async Task<ResolutionDetails<int>> ResolveIntegerValueAsync(stri
161
164
{
162
165
var resp = await CallApi ( flagKey , defaultValue , context ) ;
163
166
return new ResolutionDetails < int > ( flagKey , int . Parse ( resp . value . ToString ( ) ) , ErrorType . None ,
164
- resp . reason , resp . variationType ) ;
167
+ resp . reason , resp . variationType , null ,
168
+ resp . metadata == null ? null : new ImmutableMetadata ( resp . metadata ) ) ;
165
169
}
166
170
catch ( FormatException e )
167
171
{
@@ -185,15 +189,17 @@ public override async Task<ResolutionDetails<int>> ResolveIntegerValueAsync(stri
185
189
/// <exception cref="FlagNotFoundError">If the flag does not exists</exception>
186
190
/// <exception cref="GeneralError">If an unknown error happen</exception>
187
191
/// <exception cref="FlagDisabled">If the flag is disabled</exception>
188
- public override async Task < ResolutionDetails < double > > ResolveDoubleValueAsync ( string flagKey , double defaultValue ,
192
+ public override async Task < ResolutionDetails < double > > ResolveDoubleValueAsync ( string flagKey ,
193
+ double defaultValue ,
189
194
EvaluationContext context = null , CancellationToken cancellationToken = default )
190
195
{
191
196
try
192
197
{
193
198
var resp = await CallApi ( flagKey , defaultValue , context ) ;
194
199
return new ResolutionDetails < double > ( flagKey ,
195
200
double . Parse ( resp . value . ToString ( ) , CultureInfo . InvariantCulture ) , ErrorType . None ,
196
- resp . reason , resp . variationType ) ;
201
+ resp . reason , resp . variationType , null ,
202
+ resp . metadata == null ? null : new ImmutableMetadata ( resp . metadata ) ) ;
197
203
}
198
204
catch ( FormatException e )
199
205
{
@@ -217,7 +223,8 @@ public override async Task<ResolutionDetails<double>> ResolveDoubleValueAsync(st
217
223
/// <exception cref="FlagNotFoundError">If the flag does not exists</exception>
218
224
/// <exception cref="GeneralError">If an unknown error happen</exception>
219
225
/// <exception cref="FlagDisabled">If the flag is disabled</exception>
220
- public override async Task < ResolutionDetails < Value > > ResolveStructureValueAsync ( string flagKey , Value defaultValue ,
226
+ public override async Task < ResolutionDetails < Value > > ResolveStructureValueAsync ( string flagKey ,
227
+ Value defaultValue ,
221
228
EvaluationContext context = null , CancellationToken cancellationToken = default )
222
229
{
223
230
try
@@ -227,7 +234,7 @@ public override async Task<ResolutionDetails<Value>> ResolveStructureValueAsync(
227
234
{
228
235
var value = ConvertValue ( ( JsonElement ) resp . value ) ;
229
236
return new ResolutionDetails < Value > ( flagKey , value , ErrorType . None , resp . reason ,
230
- resp . variationType ) ;
237
+ resp . variationType , null , resp . metadata == null ? null : new ImmutableMetadata ( resp . metadata ) ) ;
231
238
}
232
239
233
240
throw new TypeMismatchError ( $ "flag value { flagKey } had unexpected type") ;
@@ -285,6 +292,7 @@ private async Task<GoFeatureFlagResponse> CallApi<T>(string flagKey, T defaultVa
285
292
if ( "FLAG_NOT_FOUND" . Equals ( goffResp . errorCode ) )
286
293
throw new FlagNotFoundError ( $ "flag { flagKey } was not found in your configuration") ;
287
294
295
+ if ( goffResp . metadata != null ) goffResp . metadata = DictionaryConverter . ConvertDictionary ( goffResp . metadata ) ;
288
296
return goffResp ;
289
297
}
290
298
0 commit comments