|
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