in openfeature-provider/src/main/java/com/spotify/confidence/ConfidenceFeatureProvider.java [113:140]
private <T> ProviderEvaluation<T> getCastedEvaluation(
String key, T defaultValue, EvaluationContext ctx, Function<Value, T> cast) {
final Value wrappedDefaultValue;
try {
wrappedDefaultValue = new Value(defaultValue);
} catch (InstantiationException e) {
// this is not going to happen because we only call the constructor with supported types
throw new RuntimeException(e);
}
final ProviderEvaluation<Value> objectEvaluation =
getObjectEvaluation(key, wrappedDefaultValue, ctx);
final T castedValue = cast.apply(objectEvaluation.getValue());
if (castedValue == null) {
log.warn("Cannot cast value '{}' to expected type", objectEvaluation.getValue().toString());
throw new TypeMismatchError(
String.format("Cannot cast value '%s' to expected type", objectEvaluation.getValue()));
}
return ProviderEvaluation.<T>builder()
.value(castedValue)
.variant(objectEvaluation.getVariant())
.reason(objectEvaluation.getReason())
.errorMessage(objectEvaluation.getErrorMessage())
.errorCode(objectEvaluation.getErrorCode())
.build();
}