diff --git a/libjf-base/src/main/java/io/gitlab/jfronny/libjf/serialize/SerializationMode.java b/libjf-base/src/main/java/io/gitlab/jfronny/libjf/serialize/SerializationMode.java index 4bba7af..f57f934 100644 --- a/libjf-base/src/main/java/io/gitlab/jfronny/libjf/serialize/SerializationMode.java +++ b/libjf-base/src/main/java/io/gitlab/jfronny/libjf/serialize/SerializationMode.java @@ -5,12 +5,13 @@ import io.gitlab.jfronny.commons.serialize.SerializeWriter; import io.gitlab.jfronny.commons.serialize.json.JsonWriter; public class SerializationMode { - public static > void asConfig(Reader reader) { + public static > Reader asConfig(Reader reader) { reader.setLenient(true) .setSerializeSpecialFloatingPointValues(true); + return reader; } - public static > void asConfig(Writer writer) { + public static > Writer asConfig(Writer writer) { writer.setLenient(true) .setSerializeSpecialFloatingPointValues(true) .setSerializeNulls(true); @@ -20,5 +21,6 @@ public class SerializationMode { .setOmitQuotes(true) .setCommentUnexpectedNames(true); } + return writer; } } diff --git a/libjf-config-ui-tiny/src/client/java/io/gitlab/jfronny/libjf/config/impl/ui/tiny/TinyConfigScreenFactory.java b/libjf-config-ui-tiny/src/client/java/io/gitlab/jfronny/libjf/config/impl/ui/tiny/TinyConfigScreenFactory.java index 7601ce9..1a0b480 100644 --- a/libjf-config-ui-tiny/src/client/java/io/gitlab/jfronny/libjf/config/impl/ui/tiny/TinyConfigScreenFactory.java +++ b/libjf-config-ui-tiny/src/client/java/io/gitlab/jfronny/libjf/config/impl/ui/tiny/TinyConfigScreenFactory.java @@ -1,12 +1,16 @@ package io.gitlab.jfronny.libjf.config.impl.ui.tiny; import io.gitlab.jfronny.commons.Serializer; +import io.gitlab.jfronny.commons.serialize.Transport; +import io.gitlab.jfronny.commons.serialize.databind.api.TypeToken; +import io.gitlab.jfronny.commons.serialize.json.JsonReader; import io.gitlab.jfronny.libjf.LibJf; import io.gitlab.jfronny.libjf.config.api.v2.ConfigInstance; import io.gitlab.jfronny.libjf.config.api.v2.EntryInfo; import io.gitlab.jfronny.libjf.config.api.v2.dsl.CategoryBuilder; import io.gitlab.jfronny.libjf.config.api.v2.type.Type; import io.gitlab.jfronny.libjf.config.api.v2.ui.ConfigScreenFactory; +import io.gitlab.jfronny.libjf.serialize.SerializationMode; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.resource.language.I18n; @@ -29,7 +33,7 @@ public class TinyConfigScreenFactory implements ConfigScreenFactory LibJf.MAPPER.serialize(value, writer)); + jsonified = LibJf.JSON_TRANSPORT.write(writer -> LibJf.MAPPER.serialize(value, SerializationMode.asConfig(writer))); } catch (IllegalAccessException | IOException e) { throw new RuntimeException(e); } @@ -41,6 +45,11 @@ public class TinyConfigScreenFactory implements ConfigScreenFactory { try { + entry.setValue(LibJf.JSON_TRANSPORT.read( + json, + (Transport.Returnable) reader -> LibJf.MAPPER + .getAdapter(TypeToken.get(type.asClass())) + .deserialize(SerializationMode.asConfig(reader)))); entry.setValue(Serializer.getInstance().deserialize(json, type.asClass())); config.write(); } catch (Throwable e) { diff --git a/libjf-config-ui-tiny/src/client/java/io/gitlab/jfronny/libjf/config/impl/ui/tiny/entry/EntryInfoWidgetBuilder.java b/libjf-config-ui-tiny/src/client/java/io/gitlab/jfronny/libjf/config/impl/ui/tiny/entry/EntryInfoWidgetBuilder.java index daa6e23..575b4c5 100644 --- a/libjf-config-ui-tiny/src/client/java/io/gitlab/jfronny/libjf/config/impl/ui/tiny/entry/EntryInfoWidgetBuilder.java +++ b/libjf-config-ui-tiny/src/client/java/io/gitlab/jfronny/libjf/config/impl/ui/tiny/entry/EntryInfoWidgetBuilder.java @@ -2,13 +2,18 @@ package io.gitlab.jfronny.libjf.config.impl.ui.tiny.entry; import io.gitlab.jfronny.commons.Serializer; import io.gitlab.jfronny.commons.ref.R; +import io.gitlab.jfronny.commons.serialize.Transport; +import io.gitlab.jfronny.commons.serialize.databind.api.TypeToken; +import io.gitlab.jfronny.commons.serialize.json.JsonReader; import io.gitlab.jfronny.commons.throwable.Try; import io.gitlab.jfronny.libjf.LibJf; import io.gitlab.jfronny.libjf.config.api.v2.ConfigCategory; import io.gitlab.jfronny.libjf.config.api.v2.EntryInfo; +import io.gitlab.jfronny.libjf.config.api.v2.JfConfig; import io.gitlab.jfronny.libjf.config.api.v2.type.Type; import io.gitlab.jfronny.libjf.config.impl.ConfigCore; import io.gitlab.jfronny.libjf.config.impl.ui.tiny.EditorScreen; +import io.gitlab.jfronny.libjf.serialize.SerializationMode; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.gui.widget.ButtonWidget; @@ -19,6 +24,7 @@ import net.minecraft.text.Text; import net.minecraft.util.Formatting; import net.minecraft.util.Language; +import java.io.IOException; import java.util.LinkedList; import java.util.List; import java.util.function.Function; @@ -171,7 +177,7 @@ public class EntryInfoWidgetBuilder { final String jsonified; if (state.tempValue == null) { try { - jsonified = Serializer.getInstance().serialize(state.cachedValue); + jsonified = LibJf.JSON_TRANSPORT.write(writer -> LibJf.MAPPER.serialize(state.cachedValue, SerializationMode.asConfig(writer))); } catch (Throwable e) { LibJf.LOGGER.error("Could not stringify element", e); SystemToast.add( @@ -193,7 +199,11 @@ public class EntryInfoWidgetBuilder { jsonified, json -> { try { - state.updateCache(Serializer.getInstance().deserialize(json, info.getValueType().asClass())); + state.updateCache(LibJf.JSON_TRANSPORT.read( + json, + (Transport.Returnable) reader -> LibJf.MAPPER + .getAdapter((TypeToken) TypeToken.get(info.getValueType().asClass())) + .deserialize(SerializationMode.asConfig(reader)))); state.tempValue = null; } catch (Throwable e) { LibJf.LOGGER.error("Could not write element", e);