feat: add lenient transport as alternative to manually setting SerializationMode
This commit is contained in:
parent
bd30200197
commit
a33b27e57d
|
@ -1,5 +1,6 @@
|
|||
package io.gitlab.jfronny.libjf;
|
||||
|
||||
import com.sun.jdi.connect.Transport;
|
||||
import io.gitlab.jfronny.commons.Serializer;
|
||||
import io.gitlab.jfronny.commons.logger.DelegateLogger;
|
||||
import io.gitlab.jfronny.commons.logger.HotswapLoggerFinder;
|
||||
|
@ -9,6 +10,7 @@ import io.gitlab.jfronny.commons.serialize.databind.ObjectMapper;
|
|||
import io.gitlab.jfronny.commons.serialize.json.JsonTransport;
|
||||
import io.gitlab.jfronny.libjf.log.JULBridge;
|
||||
import io.gitlab.jfronny.libjf.log.SLF4JPlatformLogger;
|
||||
import io.gitlab.jfronny.libjf.serialize.LenientTransport;
|
||||
import net.fabricmc.loader.api.entrypoint.PreLaunchEntrypoint;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
|
@ -17,6 +19,7 @@ public class LibJf implements PreLaunchEntrypoint {
|
|||
public static final SystemLoggerPlus LOGGER = SystemLoggerPlus.forName(MOD_ID);
|
||||
public static final ObjectMapper MAPPER = new ObjectMapper();
|
||||
public static final JsonTransport JSON_TRANSPORT = new JsonTransport();
|
||||
public static final JsonTransport LENIENT_TRANSPORT = new LenientTransport();
|
||||
|
||||
static {
|
||||
Serializer.setInstance(new DatabindSerializer<>(JSON_TRANSPORT, MAPPER));
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
package io.gitlab.jfronny.libjf.serialize;
|
||||
|
||||
import io.gitlab.jfronny.commons.serialize.json.JsonReader;
|
||||
import io.gitlab.jfronny.commons.serialize.json.JsonTransport;
|
||||
import io.gitlab.jfronny.commons.serialize.json.JsonWriter;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.Reader;
|
||||
import java.io.Writer;
|
||||
|
||||
public class LenientTransport extends JsonTransport {
|
||||
@Override
|
||||
public JsonWriter createWriter(Writer target) throws IOException {
|
||||
return SerializationMode.asConfig(super.createWriter(target));
|
||||
}
|
||||
|
||||
@Override
|
||||
public JsonReader createReader(Reader source) {
|
||||
return SerializationMode.asConfig(super.createReader(source));
|
||||
}
|
||||
}
|
|
@ -8,7 +8,6 @@ import io.gitlab.jfronny.libjf.LibJf;
|
|||
import io.gitlab.jfronny.libjf.config.api.v2.*;
|
||||
import io.gitlab.jfronny.libjf.config.impl.entrypoint.JfConfigSafe;
|
||||
import io.gitlab.jfronny.libjf.config.impl.watch.JfConfigWatchService;
|
||||
import io.gitlab.jfronny.libjf.serialize.SerializationMode;
|
||||
|
||||
import java.io.*;
|
||||
import java.nio.file.Files;
|
||||
|
@ -21,8 +20,7 @@ public class DefaultConfigIO {
|
|||
// Actions cannot be cached since entries can change
|
||||
if (Files.exists(path)) {
|
||||
try (BufferedReader br = Files.newBufferedReader(path);
|
||||
JsonReader jr = new JsonReader(br)) {
|
||||
SerializationMode.asConfig(jr);
|
||||
JsonReader jr = LibJf.LENIENT_TRANSPORT.createReader(br)) {
|
||||
runActions(id, createActions(c), jr);
|
||||
} catch (Exception e) {
|
||||
LibJf.LOGGER.error("Could not read config for " + id, e);
|
||||
|
@ -94,8 +92,7 @@ public class DefaultConfigIO {
|
|||
public static Consumer<ConfigInstance> writer(String id) {
|
||||
return c -> c.getFilePath().ifPresent(path -> JfConfigWatchService.lock(path, () -> {
|
||||
try (BufferedWriter bw = Files.newBufferedWriter(path);
|
||||
JsonWriter jw = new JsonWriter(bw)) {
|
||||
SerializationMode.asConfig(jw);
|
||||
JsonWriter jw = LibJf.LENIENT_TRANSPORT.createWriter(bw)) {
|
||||
writeTo(jw, c);
|
||||
} catch (Exception e) {
|
||||
LibJf.LOGGER.error("Could not write config for " + id, e);
|
||||
|
|
|
@ -10,7 +10,6 @@ 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;
|
||||
|
@ -33,7 +32,7 @@ public class TinyConfigScreenFactory implements ConfigScreenFactory<Screen, Tiny
|
|||
final String jsonified;
|
||||
try {
|
||||
var value = entry.getValue();
|
||||
jsonified = LibJf.JSON_TRANSPORT.write(writer -> LibJf.MAPPER.serialize(value, SerializationMode.asConfig(writer)));
|
||||
jsonified = LibJf.LENIENT_TRANSPORT.write(writer -> LibJf.MAPPER.serialize(value, writer));
|
||||
} catch (IllegalAccessException | IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
@ -45,11 +44,11 @@ public class TinyConfigScreenFactory implements ConfigScreenFactory<Screen, Tiny
|
|||
jsonified,
|
||||
json -> {
|
||||
try {
|
||||
entry.setValue(LibJf.JSON_TRANSPORT.read(
|
||||
entry.setValue(LibJf.LENIENT_TRANSPORT.read(
|
||||
json,
|
||||
(Transport.Returnable<JsonReader, ? extends Object, IOException>) reader -> LibJf.MAPPER
|
||||
.getAdapter(TypeToken.get(type.asClass()))
|
||||
.deserialize(SerializationMode.asConfig(reader))));
|
||||
.deserialize(reader)));
|
||||
entry.setValue(Serializer.getInstance().deserialize(json, type.asClass()));
|
||||
config.write();
|
||||
} catch (Throwable e) {
|
||||
|
|
|
@ -9,11 +9,9 @@ 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;
|
||||
|
@ -177,7 +175,7 @@ public class EntryInfoWidgetBuilder {
|
|||
final String jsonified;
|
||||
if (state.tempValue == null) {
|
||||
try {
|
||||
jsonified = LibJf.JSON_TRANSPORT.write(writer -> LibJf.MAPPER.serialize(state.cachedValue, SerializationMode.asConfig(writer)));
|
||||
jsonified = LibJf.LENIENT_TRANSPORT.write(writer -> LibJf.MAPPER.serialize(state.cachedValue, writer));
|
||||
} catch (Throwable e) {
|
||||
LibJf.LOGGER.error("Could not stringify element", e);
|
||||
SystemToast.add(
|
||||
|
@ -199,11 +197,11 @@ public class EntryInfoWidgetBuilder {
|
|||
jsonified,
|
||||
json -> {
|
||||
try {
|
||||
state.updateCache(LibJf.JSON_TRANSPORT.read(
|
||||
state.updateCache(LibJf.LENIENT_TRANSPORT.read(
|
||||
json,
|
||||
(Transport.Returnable<JsonReader, ? extends T, IOException>) reader -> LibJf.MAPPER
|
||||
.getAdapter((TypeToken<T>) TypeToken.get(info.getValueType().asClass()))
|
||||
.deserialize(SerializationMode.asConfig(reader))));
|
||||
.deserialize(reader)));
|
||||
state.tempValue = null;
|
||||
} catch (Throwable e) {
|
||||
LibJf.LOGGER.error("Could not write element", e);
|
||||
|
|
Loading…
Reference in New Issue