From 515629f300eed07e423f2d26621d74019b07b766 Mon Sep 17 00:00:00 2001 From: Jeff Murray Date: Tue, 16 Jan 2024 14:37:03 -0600 Subject: [PATCH] Add deserializer --- src/main/java/com/vertexvis/JSON.java | 4 ++ ...hookEventSceneIncludedDataTypeAdapter.java | 44 +++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 src/main/java/com/vertexvis/model/serialization/OneOfWebhookEventSceneIncludedDataTypeAdapter.java diff --git a/src/main/java/com/vertexvis/JSON.java b/src/main/java/com/vertexvis/JSON.java index 077d0f0..2d49274 100644 --- a/src/main/java/com/vertexvis/JSON.java +++ b/src/main/java/com/vertexvis/JSON.java @@ -132,6 +132,10 @@ public JSON() { .registerTypeAdapter( OneOfQueuedExportCompletedEventQueuedSceneItemCompletedEventQueuedTranslationCompletedEventSceneCreatedEventSceneDeletedEventSceneUpdatedEvent.class, new OneOfQueuedExportCompletedEventQueuedSceneItemCompletedEventQueuedTranslationCompletedEventSceneCreatedEventSceneDeletedEventSceneUpdatedEventTypeAdaptor(() -> gson)) + .registerTypeAdapter( + OneOfWebhookEventSceneIncludedData.class, + new OneOfWebhookEventSceneIncludedDataTypeAdapter(() -> gson) + ) .create(); } diff --git a/src/main/java/com/vertexvis/model/serialization/OneOfWebhookEventSceneIncludedDataTypeAdapter.java b/src/main/java/com/vertexvis/model/serialization/OneOfWebhookEventSceneIncludedDataTypeAdapter.java new file mode 100644 index 0000000..a418cb2 --- /dev/null +++ b/src/main/java/com/vertexvis/model/serialization/OneOfWebhookEventSceneIncludedDataTypeAdapter.java @@ -0,0 +1,44 @@ +package com.vertexvis.model.serialization; + +import com.google.gson.*; +import com.google.gson.reflect.TypeToken; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import com.vertexvis.model.*; + +import java.io.IOException; +import java.util.function.Supplier; + +public class OneOfWebhookEventSceneIncludedDataTypeAdapter extends TypeAdapter { + private Supplier gsonSupplier; + + public OneOfWebhookEventSceneIncludedDataTypeAdapter(Supplier gsonSupplier) { + this.gsonSupplier = gsonSupplier; + } + + @Override + public void write(JsonWriter out, OneOfWebhookEventSceneIncludedData value) throws IOException { + TypeAdapter jsonAdapter = gsonSupplier.get().getAdapter(JsonElement.class); + TypeAdapter sceneIncludedDataTypeAdapter = gsonSupplier.get().getAdapter(TypeToken.get(WebhookEventSceneIncludedData.class)); + + if (value.getData() instanceof WebhookEventSceneIncludedData) { + jsonAdapter.write(out, sceneIncludedDataTypeAdapter.toJsonTree(value.getSceneIncludedData())); + } + } + + @Override + public OneOfWebhookEventSceneIncludedData read(JsonReader in) throws IOException { + TypeAdapter jsonAdapter = gsonSupplier.get().getAdapter(JsonElement.class); + TypeAdapter sceneIncludedDataTypeAdapter = gsonSupplier.get().getAdapter(TypeToken.get(WebhookEventSceneIncludedData.class)); + + JsonObject json = jsonAdapter.read(in).getAsJsonObject(); + String type = json.get("type").getAsString(); + + switch (type) { + case "scene": + return new OneOfWebhookEventSceneIncludedData(sceneIncludedDataTypeAdapter.fromJsonTree(json)); + default: + throw new IOException("JSON deserializer not implemented for type " + type); + } + } +} \ No newline at end of file