Skip to content

Commit 03dfc91

Browse files
aepflitoddbaert
andauthored
feat: flow instead of exceptions in resolver (#942)
Signed-off-by: Simon Schrottner <[email protected]> Co-authored-by: Todd Baert <[email protected]>
1 parent f74fe5f commit 03dfc91

File tree

2 files changed

+14
-10
lines changed

2 files changed

+14
-10
lines changed

providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/InProcessResolver.java

+9-3
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,13 @@
1212
import dev.openfeature.contrib.providers.flagd.resolver.process.storage.connector.grpc.GrpcStreamConnector;
1313
import dev.openfeature.contrib.providers.flagd.resolver.process.targeting.Operator;
1414
import dev.openfeature.contrib.providers.flagd.resolver.process.targeting.TargetingRuleException;
15+
import dev.openfeature.sdk.ErrorCode;
1516
import dev.openfeature.sdk.EvaluationContext;
1617
import dev.openfeature.sdk.ImmutableMetadata;
1718
import dev.openfeature.sdk.ProviderEvaluation;
1819
import dev.openfeature.sdk.ProviderState;
1920
import dev.openfeature.sdk.Reason;
2021
import dev.openfeature.sdk.Value;
21-
import dev.openfeature.sdk.exceptions.FlagNotFoundError;
2222
import dev.openfeature.sdk.exceptions.ParseError;
2323
import dev.openfeature.sdk.exceptions.TypeMismatchError;
2424
import lombok.extern.slf4j.Slf4j;
@@ -164,12 +164,18 @@ private <T> ProviderEvaluation<T> resolve(Class<T> type, String key, EvaluationC
164164

165165
// missing flag
166166
if (flag == null) {
167-
throw new FlagNotFoundError("flag: " + key + " not found");
167+
return ProviderEvaluation.<T>builder()
168+
.errorMessage("flag: " + key + " not found")
169+
.errorCode(ErrorCode.FLAG_NOT_FOUND)
170+
.build();
168171
}
169172

170173
// state check
171174
if ("DISABLED".equals(flag.getState())) {
172-
throw new FlagNotFoundError("flag: " + key + " is disabled");
175+
return ProviderEvaluation.<T>builder()
176+
.errorMessage("flag: " + key + " is disabled")
177+
.errorCode(ErrorCode.FLAG_NOT_FOUND)
178+
.build();
173179
}
174180

175181
final String resolvedVariant;

providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/resolver/process/InProcessResolverTest.java

+5-7
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import dev.openfeature.contrib.providers.flagd.resolver.process.storage.StorageStateChange;
99
import dev.openfeature.contrib.providers.flagd.resolver.process.storage.connector.file.FileConnector;
1010
import dev.openfeature.contrib.providers.flagd.resolver.process.storage.connector.grpc.GrpcStreamConnector;
11+
import dev.openfeature.sdk.ErrorCode;
1112
import dev.openfeature.sdk.ImmutableContext;
1213
import dev.openfeature.sdk.ImmutableMetadata;
1314
import dev.openfeature.sdk.MutableContext;
@@ -239,10 +240,8 @@ public void missingFlag() throws Exception {
239240
});
240241

241242
// when/then
242-
assertThrows(FlagNotFoundError.class, () -> {
243-
inProcessResolver.booleanEvaluation("missingFlag", false, new ImmutableContext());
244-
245-
});
243+
ProviderEvaluation<Boolean> missingFlag = inProcessResolver.booleanEvaluation("missingFlag", false, new ImmutableContext());
244+
assertEquals(ErrorCode.FLAG_NOT_FOUND, missingFlag.getErrorCode());
246245
}
247246

248247
@Test
@@ -256,9 +255,8 @@ public void disabledFlag() throws Exception {
256255
});
257256

258257
// when/then
259-
assertThrows(FlagNotFoundError.class, () -> {
260-
inProcessResolver.booleanEvaluation("disabledFlag", false, new ImmutableContext());
261-
});
258+
ProviderEvaluation<Boolean> disabledFlag = inProcessResolver.booleanEvaluation("disabledFlag", false, new ImmutableContext());
259+
assertEquals(ErrorCode.FLAG_NOT_FOUND, disabledFlag.getErrorCode());
262260
}
263261

264262
@Test

0 commit comments

Comments
 (0)