|
1 | 1 | package dev.openfeature.sdk.providers.memory;
|
2 | 2 |
|
3 |
| -import dev.openfeature.sdk.Value; |
4 |
| -import dev.openfeature.sdk.Metadata; |
5 |
| -import dev.openfeature.sdk.EventProvider; |
6 |
| -import dev.openfeature.sdk.ProviderState; |
7 |
| -import dev.openfeature.sdk.ProviderEventDetails; |
8 |
| -import dev.openfeature.sdk.ErrorCode; |
| 3 | +import java.util.ArrayList; |
| 4 | +import java.util.Arrays; |
| 5 | +import java.util.HashMap; |
| 6 | +import java.util.HashSet; |
| 7 | +import java.util.Map; |
| 8 | +import java.util.Set; |
| 9 | + |
9 | 10 | import dev.openfeature.sdk.EvaluationContext;
|
| 11 | +import dev.openfeature.sdk.EventProvider; |
| 12 | +import dev.openfeature.sdk.Metadata; |
10 | 13 | import dev.openfeature.sdk.ProviderEvaluation;
|
| 14 | +import dev.openfeature.sdk.ProviderEventDetails; |
| 15 | +import dev.openfeature.sdk.ProviderState; |
11 | 16 | import dev.openfeature.sdk.Reason;
|
| 17 | +import dev.openfeature.sdk.Value; |
| 18 | +import dev.openfeature.sdk.exceptions.FlagNotFoundError; |
| 19 | +import dev.openfeature.sdk.exceptions.GeneralError; |
12 | 20 | import dev.openfeature.sdk.exceptions.OpenFeatureError;
|
| 21 | +import dev.openfeature.sdk.exceptions.ProviderNotReadyError; |
| 22 | +import dev.openfeature.sdk.exceptions.TypeMismatchError; |
13 | 23 | import lombok.Getter;
|
14 | 24 | import lombok.SneakyThrows;
|
15 | 25 | import lombok.extern.slf4j.Slf4j;
|
16 | 26 |
|
17 |
| -import java.util.Map; |
18 |
| -import java.util.HashMap; |
19 |
| -import java.util.Set; |
20 |
| -import java.util.HashSet; |
21 |
| -import java.util.Arrays; |
22 |
| -import java.util.ArrayList; |
23 |
| - |
24 | 27 | /**
|
25 | 28 | * In-memory provider.
|
26 | 29 | */
|
@@ -87,68 +90,52 @@ public void updateFlag(String flagKey, Flag<?> flag) {
|
87 | 90 | @Override
|
88 | 91 | public ProviderEvaluation<Boolean> getBooleanEvaluation(String key, Boolean defaultValue,
|
89 | 92 | EvaluationContext evaluationContext) {
|
90 |
| - return getEvaluation(key, defaultValue, evaluationContext, Boolean.class); |
| 93 | + return getEvaluation(key, evaluationContext, Boolean.class); |
91 | 94 | }
|
92 | 95 |
|
93 | 96 | @Override
|
94 | 97 | public ProviderEvaluation<String> getStringEvaluation(String key, String defaultValue,
|
95 | 98 | EvaluationContext evaluationContext) {
|
96 |
| - return getEvaluation(key, defaultValue, evaluationContext, String.class); |
| 99 | + return getEvaluation(key, evaluationContext, String.class); |
97 | 100 | }
|
98 | 101 |
|
99 | 102 | @Override
|
100 | 103 | public ProviderEvaluation<Integer> getIntegerEvaluation(String key, Integer defaultValue,
|
101 | 104 | EvaluationContext evaluationContext) {
|
102 |
| - return getEvaluation(key, defaultValue, evaluationContext, Integer.class); |
| 105 | + return getEvaluation(key, evaluationContext, Integer.class); |
103 | 106 | }
|
104 | 107 |
|
105 | 108 | @Override
|
106 | 109 | public ProviderEvaluation<Double> getDoubleEvaluation(String key, Double defaultValue,
|
107 | 110 | EvaluationContext evaluationContext) {
|
108 |
| - return getEvaluation(key, defaultValue, evaluationContext, Double.class); |
| 111 | + return getEvaluation(key, evaluationContext, Double.class); |
109 | 112 | }
|
110 | 113 |
|
111 | 114 | @SneakyThrows
|
112 | 115 | @Override
|
113 | 116 | public ProviderEvaluation<Value> getObjectEvaluation(String key, Value defaultValue,
|
114 | 117 | EvaluationContext evaluationContext) {
|
115 |
| - return getEvaluation(key, defaultValue, evaluationContext, Value.class); |
| 118 | + return getEvaluation(key, evaluationContext, Value.class); |
116 | 119 | }
|
117 | 120 |
|
118 | 121 | private <T> ProviderEvaluation<T> getEvaluation(
|
119 |
| - String key, T defaultValue, EvaluationContext evaluationContext, Class<?> expectedType |
| 122 | + String key, EvaluationContext evaluationContext, Class<?> expectedType |
120 | 123 | ) throws OpenFeatureError {
|
121 | 124 | if (!ProviderState.READY.equals(state)) {
|
122 |
| - ErrorCode errorCode = ErrorCode.PROVIDER_NOT_READY; |
123 |
| - if (ProviderState.ERROR.equals(state)) { |
124 |
| - errorCode = ErrorCode.GENERAL; |
| 125 | + if (ProviderState.NOT_READY.equals(state)) { |
| 126 | + throw new ProviderNotReadyError("provider not yet initialized"); |
125 | 127 | }
|
126 |
| - return ProviderEvaluation.<T>builder() |
127 |
| - .errorCode(errorCode) |
128 |
| - .reason(errorCode.name()) |
129 |
| - .value(defaultValue) |
130 |
| - .build(); |
| 128 | + throw new GeneralError("unknown error"); |
131 | 129 | }
|
132 | 130 | Flag<?> flag = flags.get(key);
|
133 | 131 | if (flag == null) {
|
134 |
| - return ProviderEvaluation.<T>builder() |
135 |
| - .value(defaultValue) |
136 |
| - .reason(Reason.ERROR.toString()) |
137 |
| - .errorMessage(ErrorCode.FLAG_NOT_FOUND.name()) |
138 |
| - .errorCode(ErrorCode.FLAG_NOT_FOUND) |
139 |
| - .build(); |
| 132 | + throw new FlagNotFoundError("flag " + key + "not found"); |
140 | 133 | }
|
141 | 134 | T value;
|
142 | 135 | if (flag.getContextEvaluator() != null) {
|
143 | 136 | value = (T) flag.getContextEvaluator().evaluate(flag, evaluationContext);
|
144 | 137 | } else if (!expectedType.isInstance(flag.getVariants().get(flag.getDefaultVariant()))) {
|
145 |
| - return ProviderEvaluation.<T>builder() |
146 |
| - .value(defaultValue) |
147 |
| - .variant(flag.getDefaultVariant()) |
148 |
| - .reason(Reason.ERROR.toString()) |
149 |
| - .errorMessage(ErrorCode.TYPE_MISMATCH.name()) |
150 |
| - .errorCode(ErrorCode.TYPE_MISMATCH) |
151 |
| - .build(); |
| 138 | + throw new TypeMismatchError("flag " + key + "is not of expected type"); |
152 | 139 | } else {
|
153 | 140 | value = (T) flag.getVariants().get(flag.getDefaultVariant());
|
154 | 141 | }
|
|
0 commit comments