mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-04-14 11:48:16 +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;
|
package dev.sheldan.abstracto.moderation.model.template.command;
|
||||||
|
|
||||||
import dev.sheldan.abstracto.core.models.context.SlimUserInitiatedServerContext;
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
import lombok.experimental.SuperBuilder;
|
import lombok.experimental.SuperBuilder;
|
||||||
@@ -13,7 +12,7 @@ import java.util.List;
|
|||||||
@Getter
|
@Getter
|
||||||
@Setter
|
@Setter
|
||||||
@SuperBuilder
|
@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
|
* 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() {
|
public Gson gson() {
|
||||||
GsonBuilder builder = new GsonBuilder()
|
GsonBuilder builder = new GsonBuilder()
|
||||||
.registerTypeAdapter(OffsetDateTime.class, new OffsetDateTimeAdapter())
|
.registerTypeAdapter(OffsetDateTime.class, new OffsetDateTimeAdapter())
|
||||||
.registerTypeAdapter(Instant.class, new InstantTimeAdapter())
|
.registerTypeAdapter(Instant.class, new InstantAdapter())
|
||||||
.setPrettyPrinting();
|
.setPrettyPrinting();
|
||||||
if(customJsonDeSerializers != null) {
|
if(customJsonDeSerializers != null) {
|
||||||
customJsonDeSerializers.forEach(customJsonSerializer ->
|
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;
|
package dev.sheldan.abstracto.core.config;
|
||||||
|
|
||||||
import com.google.gson.JsonDeserializationContext;
|
import com.google.gson.*;
|
||||||
import com.google.gson.JsonDeserializer;
|
|
||||||
import com.google.gson.JsonElement;
|
|
||||||
|
|
||||||
import java.lang.reflect.Type;
|
import java.lang.reflect.Type;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
@@ -11,12 +9,19 @@ import java.time.ZoneId;
|
|||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.time.temporal.TemporalAccessor;
|
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
|
@Override
|
||||||
public OffsetDateTime deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) {
|
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);
|
Instant i = Instant.from(ta);
|
||||||
return OffsetDateTime.ofInstant(i, ZoneId.systemDefault());
|
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