Skip to content

Commit 571d873

Browse files
committed
fixup: serializer
Signed-off-by: Simon Schrottner <simon.schrottner@dynatrace.com>
1 parent 612b822 commit 571d873

1 file changed

Lines changed: 32 additions & 1 deletion

File tree

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

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,14 @@
1717
import com.dylibso.chicory.wasm.types.ValType;
1818
import com.dylibso.chicory.wasm.types.ValueType;
1919
import com.fasterxml.jackson.core.JsonProcessingException;
20+
import com.fasterxml.jackson.databind.BeanDescription;
21+
import com.fasterxml.jackson.databind.DeserializationConfig;
22+
import com.fasterxml.jackson.databind.JsonDeserializer;
2023
import com.fasterxml.jackson.databind.JsonMappingException;
2124
import com.fasterxml.jackson.databind.ObjectMapper;
25+
import com.fasterxml.jackson.databind.deser.BeanDeserializerBuilder;
26+
import com.fasterxml.jackson.databind.deser.BeanDeserializerModifier;
27+
import com.fasterxml.jackson.databind.module.SimpleModule;
2228
import com.google.protobuf.Struct;
2329
import dev.openfeature.contrib.providers.flagd.FlagdOptions;
2430
import dev.openfeature.contrib.providers.flagd.resolver.Resolver;
@@ -64,6 +70,15 @@ public class InProcessWasmResolver implements Resolver {
6470

6571
private static final Function<Instance, Machine> MACHINE_FUNCTION;
6672
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
73+
74+
{
75+
76+
// Register this module with your ObjectMapper
77+
SimpleModule module = new SimpleModule();
78+
module.addDeserializer(ImmutableMetadata.class, new ImmutableMetadataDeserializer());
79+
OBJECT_MAPPER.registerModule(module);
80+
}
81+
6782
private final Consumer<FlagdProviderEvent> onConnectionEvent;
6883
private final String scope;
6984
private final QueueSource connector;
@@ -294,7 +309,8 @@ private <T> ProviderEvaluation<T> resolve(Class<T> type, String key, EvaluationC
294309
dealloc.apply(flagPtr, flagBytes.length);
295310
dealloc.apply(ctxPtr, ctxBytes.length);
296311
try {
297-
return OBJECT_MAPPER.readValue(result, ProviderEvaluation.class);
312+
ProviderEvaluation providerEvaluation = OBJECT_MAPPER.readValue(result, ProviderEvaluation.class);
313+
return providerEvaluation;
298314
} catch (JsonProcessingException e) {
299315
throw new RuntimeException(e);
300316
}
@@ -652,4 +668,19 @@ private static HostFunction createWbindgenError() {
652668
);
653669
}
654670

671+
// Implement a custom deserializer for ImmutableMetadata
672+
public class ImmutableMetadataDeserializer extends JsonDeserializer<ImmutableMetadata> {
673+
@Override
674+
public ImmutableMetadata deserialize(com.fasterxml.jackson.core.JsonParser p,
675+
com.fasterxml.jackson.databind.DeserializationContext ctxt)
676+
throws IOException {
677+
// Deserialize into a Map or DTO, then use the builder
678+
Map<String, Object> map = p.readValueAs(Map.class);
679+
ImmutableMetadata.ImmutableMetadataBuilder builder = ImmutableMetadata.builder();
680+
for (Map.Entry<String, Object> entry : map.entrySet()) {
681+
builder.addString(entry.getKey(), entry.getValue().toString());
682+
}
683+
return builder.build();
684+
}
685+
}
655686
}

0 commit comments

Comments
 (0)