[AB-xxx] adding serialization for instant and offset datetime for gson payload storage

This commit is contained in:
Sheldan
2023-07-27 20:00:01 +02:00
parent cee10de915
commit b7c427026d
5 changed files with 36 additions and 27 deletions

View File

@@ -1,6 +1,5 @@
package dev.sheldan.abstracto.moderation.model.template.command;
import dev.sheldan.abstracto.core.models.context.SlimUserInitiatedServerContext;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.SuperBuilder;
@@ -13,7 +12,7 @@ import java.util.List;
@Getter
@Setter
@SuperBuilder
public class WarningsModel extends SlimUserInitiatedServerContext {
public class WarningsModel {
/**
* A collection of {@link dev.sheldan.abstracto.moderation.model.database.Warning}s being rendered, might be all warnings of the server, or only the warnings of a specific user
*/

View File

@@ -40,7 +40,7 @@ public class CoreConfig {
public Gson gson() {
GsonBuilder builder = new GsonBuilder()
.registerTypeAdapter(OffsetDateTime.class, new OffsetDateTimeAdapter())
.registerTypeAdapter(Instant.class, new InstantTimeAdapter())
.registerTypeAdapter(Instant.class, new InstantAdapter())
.setPrettyPrinting();
if(customJsonDeSerializers != null) {
customJsonDeSerializers.forEach(customJsonSerializer ->

View File

@@ -0,0 +1,24 @@
package dev.sheldan.abstracto.core.config;
import com.google.gson.*;
import java.lang.reflect.Type;
import java.time.Instant;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAccessor;
public class InstantAdapter implements JsonDeserializer<Instant>, JsonSerializer<Instant> {
public static final DateTimeFormatter FORMATTER = DateTimeFormatter.ISO_INSTANT;
@Override
public Instant deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) {
TemporalAccessor ta = FORMATTER.parse(jsonElement.getAsString());
return Instant.from(ta);
}
@Override
public JsonElement serialize(Instant instant, Type type, JsonSerializationContext jsonSerializationContext) {
return new JsonPrimitive(FORMATTER.format(instant));
}
}

View File

@@ -1,19 +0,0 @@
package dev.sheldan.abstracto.core.config;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import java.lang.reflect.Type;
import java.time.Instant;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAccessor;
public class InstantTimeAdapter implements JsonDeserializer<Instant> {
@Override
public Instant deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) {
TemporalAccessor ta = DateTimeFormatter.ISO_INSTANT.parse(jsonElement.getAsString());
return Instant.from(ta);
}
}

View File

@@ -1,8 +1,6 @@
package dev.sheldan.abstracto.core.config;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.*;
import java.lang.reflect.Type;
import java.time.Instant;
@@ -11,12 +9,19 @@ import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAccessor;
public class OffsetDateTimeAdapter implements JsonDeserializer<OffsetDateTime> {
public class OffsetDateTimeAdapter implements JsonDeserializer<OffsetDateTime>, JsonSerializer<OffsetDateTime> {
public static final DateTimeFormatter FORMATTER = DateTimeFormatter.ISO_INSTANT;
@Override
public OffsetDateTime deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) {
TemporalAccessor ta = DateTimeFormatter.ISO_INSTANT.parse(jsonElement.getAsString());
TemporalAccessor ta = FORMATTER.parse(jsonElement.getAsString());
Instant i = Instant.from(ta);
return OffsetDateTime.ofInstant(i, ZoneId.systemDefault());
}
@Override
public JsonElement serialize(OffsetDateTime offsetDateTime, Type type, JsonSerializationContext jsonSerializationContext) {
return new JsonPrimitive(FORMATTER.format(offsetDateTime));
}
}