From 7b122c71e3f82969253c7d3463d35a04813d3740 Mon Sep 17 00:00:00 2001 From: applenick Date: Sun, 16 Jun 2024 23:49:59 -0700 Subject: [PATCH] Add custom gson provider for Duration Signed-off-by: applenick --- .../network/subs/NetworkSubscriber.java | 3 ++- .../network/updates/NetworkUpdateBase.java | 3 ++- .../dev/pgm/community/utils/ImportUtils.java | 3 ++- .../community/utils/gson/GsonProvider.java | 13 ++++++++++ .../utils/gson/types/DurationConverter.java | 25 +++++++++++++++++++ 5 files changed, 44 insertions(+), 3 deletions(-) create mode 100644 src/main/java/dev/pgm/community/utils/gson/GsonProvider.java create mode 100644 src/main/java/dev/pgm/community/utils/gson/types/DurationConverter.java diff --git a/src/main/java/dev/pgm/community/network/subs/NetworkSubscriber.java b/src/main/java/dev/pgm/community/network/subs/NetworkSubscriber.java index 37951ba3..4a6e88e7 100644 --- a/src/main/java/dev/pgm/community/network/subs/NetworkSubscriber.java +++ b/src/main/java/dev/pgm/community/network/subs/NetworkSubscriber.java @@ -1,6 +1,7 @@ package dev.pgm.community.network.subs; import com.google.gson.Gson; +import dev.pgm.community.utils.gson.GsonProvider; import java.util.logging.Logger; import redis.clients.jedis.JedisPubSub; @@ -15,7 +16,7 @@ public NetworkSubscriber(String channel, String networkId, Logger logger) { this.channel = channel; this.networkId = networkId; this.logger = logger; - this.gson = new Gson(); + this.gson = GsonProvider.get(); } public String getNetworkId() { diff --git a/src/main/java/dev/pgm/community/network/updates/NetworkUpdateBase.java b/src/main/java/dev/pgm/community/network/updates/NetworkUpdateBase.java index ef8a8891..a83eec07 100644 --- a/src/main/java/dev/pgm/community/network/updates/NetworkUpdateBase.java +++ b/src/main/java/dev/pgm/community/network/updates/NetworkUpdateBase.java @@ -1,6 +1,7 @@ package dev.pgm.community.network.updates; import com.google.gson.Gson; +import dev.pgm.community.utils.gson.GsonProvider; public abstract class NetworkUpdateBase implements NetworkUpdate { @@ -11,7 +12,7 @@ public abstract class NetworkUpdateBase implements NetworkUpdate { public NetworkUpdateBase(T item, String channel) { this.item = item; this.channel = channel; - this.gson = new Gson(); + this.gson = GsonProvider.get(); } @Override diff --git a/src/main/java/dev/pgm/community/utils/ImportUtils.java b/src/main/java/dev/pgm/community/utils/ImportUtils.java index c51d6a1b..c961a04e 100644 --- a/src/main/java/dev/pgm/community/utils/ImportUtils.java +++ b/src/main/java/dev/pgm/community/utils/ImportUtils.java @@ -8,6 +8,7 @@ import dev.pgm.community.moderation.punishments.Punishment; import dev.pgm.community.moderation.punishments.PunishmentType; import dev.pgm.community.users.feature.UsersFeature; +import dev.pgm.community.utils.gson.GsonProvider; import java.io.File; import java.io.FileNotFoundException; import java.nio.charset.Charset; @@ -24,7 +25,7 @@ public class ImportUtils { - private static final Gson GSON = new Gson(); + private static final Gson GSON = GsonProvider.get(); public static List getBukkitBans() throws TextException { File file = new File("banned-players.json"); diff --git a/src/main/java/dev/pgm/community/utils/gson/GsonProvider.java b/src/main/java/dev/pgm/community/utils/gson/GsonProvider.java new file mode 100644 index 00000000..269e8daa --- /dev/null +++ b/src/main/java/dev/pgm/community/utils/gson/GsonProvider.java @@ -0,0 +1,13 @@ +package dev.pgm.community.utils.gson; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import dev.pgm.community.utils.gson.types.DurationConverter; +import java.time.Duration; + +public class GsonProvider { + + public static Gson get() { + return new GsonBuilder().registerTypeAdapter(Duration.class, new DurationConverter()).create(); + } +} diff --git a/src/main/java/dev/pgm/community/utils/gson/types/DurationConverter.java b/src/main/java/dev/pgm/community/utils/gson/types/DurationConverter.java new file mode 100644 index 00000000..d2e087d6 --- /dev/null +++ b/src/main/java/dev/pgm/community/utils/gson/types/DurationConverter.java @@ -0,0 +1,25 @@ +package dev.pgm.community.utils.gson.types; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonParseException; +import com.google.gson.JsonPrimitive; +import com.google.gson.JsonSerializationContext; +import com.google.gson.JsonSerializer; +import java.lang.reflect.Type; +import java.time.Duration; + +public class DurationConverter implements JsonSerializer, JsonDeserializer { + + @Override + public JsonElement serialize(Duration src, Type typeOfSrc, JsonSerializationContext context) { + return new JsonPrimitive(src.toString()); + } + + @Override + public Duration deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) + throws JsonParseException { + return Duration.parse(json.getAsString()); + } +}