mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-01-08 18:34:05 +00:00
[AB-xxx] adding serialization for instant and offset datetime for gson payload storage
This commit is contained in:
@@ -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
|
||||
*/
|
||||
|
||||
@@ -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 ->
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user