Skip to content

Commit 8e8f321

Browse files
Add factory method for errors
1 parent cf1db21 commit 8e8f321

File tree

1 file changed

+26
-37
lines changed
  • products/feature-flagging/api/src/main/java/datadog/trace/api/openfeature

1 file changed

+26
-37
lines changed

products/feature-flagging/api/src/main/java/datadog/trace/api/openfeature/DDEvaluator.java

Lines changed: 26 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -83,36 +83,20 @@ public <T> ProviderEvaluation<T> evaluate(
8383
try {
8484
final ServerConfiguration config = configuration.get();
8585
if (config == null) {
86-
return ProviderEvaluation.<T>builder()
87-
.value(defaultValue)
88-
.reason(Reason.ERROR.name())
89-
.errorCode(ErrorCode.PROVIDER_NOT_READY)
90-
.build();
86+
return error(defaultValue, ErrorCode.PROVIDER_NOT_READY);
9187
}
9288

9389
if (context == null) {
94-
return ProviderEvaluation.<T>builder()
95-
.value(defaultValue)
96-
.reason(Reason.ERROR.name())
97-
.errorCode(ErrorCode.INVALID_CONTEXT)
98-
.build();
90+
return error(defaultValue, ErrorCode.INVALID_CONTEXT);
9991
}
10092

10193
if (context.getTargetingKey() == null) {
102-
return ProviderEvaluation.<T>builder()
103-
.value(defaultValue)
104-
.reason(Reason.ERROR.name())
105-
.errorCode(ErrorCode.TARGETING_KEY_MISSING)
106-
.build();
94+
return error(defaultValue, ErrorCode.TARGETING_KEY_MISSING);
10795
}
10896

10997
final Flag flag = config.flags.get(key);
11098
if (flag == null) {
111-
return ProviderEvaluation.<T>builder()
112-
.value(defaultValue)
113-
.reason(Reason.ERROR.name())
114-
.errorCode(ErrorCode.FLAG_NOT_FOUND)
115-
.build();
99+
return error(defaultValue, ErrorCode.FLAG_NOT_FOUND);
116100
}
117101

118102
if (!flag.enabled) {
@@ -123,12 +107,7 @@ public <T> ProviderEvaluation<T> evaluate(
123107
}
124108

125109
if (isEmpty(flag.allocations)) {
126-
return ProviderEvaluation.<T>builder()
127-
.value(defaultValue)
128-
.reason(Reason.ERROR.name())
129-
.errorCode(ErrorCode.GENERAL)
130-
.errorMessage("Missing allocations for flag " + flag.key)
131-
.build();
110+
return error(defaultValue, ErrorCode.GENERAL, "Missing allocations for flag " + flag.key);
132111
}
133112

134113
final Date now = new Date();
@@ -174,22 +153,32 @@ public <T> ProviderEvaluation<T> evaluate(
174153
.build();
175154
} catch (final NumberFormatException e) {
176155
LOGGER.debug("Evaluation failed for key {}", key, e);
177-
return ProviderEvaluation.<T>builder()
178-
.value(defaultValue)
179-
.reason(Reason.ERROR.name())
180-
.errorCode(ErrorCode.TYPE_MISMATCH)
181-
.build();
156+
return error(defaultValue, ErrorCode.TYPE_MISMATCH);
182157
} catch (final Exception e) {
183158
LOGGER.debug("Evaluation failed for key {}", key, e);
184-
return ProviderEvaluation.<T>builder()
185-
.value(defaultValue)
186-
.reason(Reason.ERROR.name())
187-
.errorCode(ErrorCode.GENERAL)
188-
.errorMessage(e.getMessage())
189-
.build();
159+
return error(defaultValue, ErrorCode.GENERAL, e);
190160
}
191161
}
192162

163+
private static <T> ProviderEvaluation<T> error(final T defaultValue, final ErrorCode code) {
164+
return error(defaultValue, code, (String) null);
165+
}
166+
167+
private static <T> ProviderEvaluation<T> error(
168+
final T defaultValue, final ErrorCode code, final Throwable cause) {
169+
return error(defaultValue, code, cause == null ? null : cause.getMessage());
170+
}
171+
172+
private static <T> ProviderEvaluation<T> error(
173+
final T defaultValue, final ErrorCode code, final String errorMessage) {
174+
return ProviderEvaluation.<T>builder()
175+
.value(defaultValue)
176+
.reason(Reason.ERROR.name())
177+
.errorCode(code)
178+
.errorMessage(errorMessage)
179+
.build();
180+
}
181+
193182
private static boolean isEmpty(final List<?> list) {
194183
return list == null || list.isEmpty();
195184
}

0 commit comments

Comments
 (0)