feat(muscript-json): no longer depend on databind

This commit is contained in:
Johannes Frohnmeyer 2024-04-13 13:49:00 +02:00
parent 9fa795f18e
commit aca5f104ec
Signed by: Johannes
GPG Key ID: E76429612C2929F4
16 changed files with 40 additions and 39 deletions

View File

@ -8,11 +8,12 @@ dependencies {
implementation(projects.commons)
implementation(projects.muscriptDataAdditional)
implementation(projects.commonsSerializeJson)
implementation(projects.commonsSerializeDatabind)
implementation(projects.commonsSerializeDatabindApi)
testImplementation(libs.junit.jupiter.api)
testImplementation(projects.muscriptParser)
testImplementation(projects.muscriptRuntime)
testImplementation(projects.commonsSerializeDatabind)
testRuntimeOnly(libs.junit.jupiter.engine)
}

View File

@ -3,8 +3,6 @@ package io.gitlab.jfronny.muscript.json;
import io.gitlab.jfronny.commons.serialize.SerializeReader;
import io.gitlab.jfronny.commons.serialize.SerializeWriter;
import io.gitlab.jfronny.commons.serialize.Transport;
import io.gitlab.jfronny.commons.serialize.databind.DatabindSerializer;
import io.gitlab.jfronny.commons.serialize.databind.ObjectMapper;
import io.gitlab.jfronny.muscript.data.additional.DFinal;
import io.gitlab.jfronny.muscript.data.additional.context.Scope;
import io.gitlab.jfronny.muscript.data.additional.libs.IntentionalException;
@ -12,22 +10,21 @@ import io.gitlab.jfronny.muscript.data.dynamic.DList;
import io.gitlab.jfronny.muscript.data.dynamic.DString;
import io.gitlab.jfronny.muscript.data.dynamic.Dynamic;
import io.gitlab.jfronny.muscript.data.dynamic.type.DType;
import java.io.IOException;
import io.gitlab.jfronny.muscript.json.impl.DynamicTypeAdapter;
import static io.gitlab.jfronny.muscript.data.dynamic.type.DSL.*;
import static io.gitlab.jfronny.muscript.data.dynamic.type.DSL.BOOL;
public class TransportLib<TEx extends Throwable, Reader extends SerializeReader<TEx, Reader>, Writer extends SerializeWriter<TEx, Writer>> {
private final DatabindSerializer<TEx, Reader, Writer> lenientBackend;
private final DatabindSerializer<TEx, Reader, Writer> strictBackend;
private final DynamicTypeAdapter adapter = new DynamicTypeAdapter();
private final String serializeName;
private final String deserializeName;
private final Transport<TEx, Reader, Writer> lenientTransport;
private final Transport<TEx, Reader, Writer> strictTransport;
public TransportLib(Transport<TEx, Reader, Writer> lenientTransport, Transport<TEx, Reader, Writer> strictTransport, String serializeName, String deserializeName) {
ObjectMapper mapper = new ObjectMapper();
this.lenientBackend = new DatabindSerializer<>(lenientTransport, mapper);
this.strictBackend = new DatabindSerializer<>(strictTransport, mapper);
this.lenientTransport = lenientTransport;
this.strictTransport = strictTransport;
this.serializeName = serializeName;
this.deserializeName = deserializeName;
}
@ -45,8 +42,8 @@ public class TransportLib<TEx extends Throwable, Reader extends SerializeReader<
Dynamic source = args.get(0);
boolean lenient = args.size() > 1 && args.get(1).asBool().getValue();
try {
return DFinal.of((lenient ? lenientBackend : strictBackend).serialize(source));
} catch (IOException e) {
return DFinal.of((lenient ? lenientTransport : strictTransport).write(writer -> adapter.serialize(source, writer)));
} catch (Throwable e) {
throw new IntentionalException("Could not serialize value: " + e.getMessage());
}
}
@ -58,8 +55,10 @@ public class TransportLib<TEx extends Throwable, Reader extends SerializeReader<
String source = args.get(0).asString().getValue();
boolean lenient = args.size() > 1 && args.get(1).asBool().getValue();
try {
return (lenient ? lenientBackend : strictBackend).deserialize(source, Dynamic.class);
} catch (IOException e) {
try (Reader reader = (lenient ? lenientTransport : strictTransport).createReader(source)) {
return adapter.deserialize(reader);
}
} catch (Throwable e) {
throw new IntentionalException("Could not deserialize value: " + e.getMessage());
}
}

View File

@ -3,8 +3,8 @@ package io.gitlab.jfronny.muscript.json.impl;
import io.gitlab.jfronny.commons.serialize.MalformedDataException;
import io.gitlab.jfronny.commons.serialize.SerializeReader;
import io.gitlab.jfronny.commons.serialize.SerializeWriter;
import io.gitlab.jfronny.commons.serialize.databind.SerializerFor;
import io.gitlab.jfronny.commons.serialize.databind.TypeAdapter;
import io.gitlab.jfronny.commons.serialize.databind.api.SerializerFor;
import io.gitlab.jfronny.commons.serialize.databind.api.TypeAdapter;
import io.gitlab.jfronny.muscript.data.additional.DDate;
import io.gitlab.jfronny.muscript.data.additional.DEnum;
import io.gitlab.jfronny.muscript.data.additional.DTime;
@ -43,6 +43,7 @@ public class DynamicTypeAdapter extends TypeAdapter<Dynamic> {
else if (value.isNumber()) dNumber.serialize(value.asNumber(), writer);
else if (value.isString()) dString.serialize(value.asString(), writer);
else if (value.isCallable()) dCallable.serialize(value.asCallable(), writer);
else if (value instanceof DynamicBase base) dynamicBase.serialize(base, writer);
else throw new IllegalArgumentException("Unexpected dynamic type for: " + value);
}

View File

@ -3,8 +3,8 @@ package io.gitlab.jfronny.muscript.json.impl.typed;
import io.gitlab.jfronny.commons.serialize.MalformedDataException;
import io.gitlab.jfronny.commons.serialize.SerializeReader;
import io.gitlab.jfronny.commons.serialize.SerializeWriter;
import io.gitlab.jfronny.commons.serialize.databind.SerializerFor;
import io.gitlab.jfronny.commons.serialize.databind.TypeAdapter;
import io.gitlab.jfronny.commons.serialize.databind.api.SerializerFor;
import io.gitlab.jfronny.commons.serialize.databind.api.TypeAdapter;
import io.gitlab.jfronny.muscript.data.additional.DFinal;
import io.gitlab.jfronny.muscript.data.dynamic.DBool;

View File

@ -3,8 +3,8 @@ package io.gitlab.jfronny.muscript.json.impl.typed;
import io.gitlab.jfronny.commons.serialize.MalformedDataException;
import io.gitlab.jfronny.commons.serialize.SerializeReader;
import io.gitlab.jfronny.commons.serialize.SerializeWriter;
import io.gitlab.jfronny.commons.serialize.databind.SerializerFor;
import io.gitlab.jfronny.commons.serialize.databind.TypeAdapter;
import io.gitlab.jfronny.commons.serialize.databind.api.SerializerFor;
import io.gitlab.jfronny.commons.serialize.databind.api.TypeAdapter;
import io.gitlab.jfronny.muscript.data.dynamic.DCallable;
@SerializerFor(targets = DCallable.class, hierarchical = true)

View File

@ -4,8 +4,8 @@ import io.gitlab.jfronny.commons.serialize.MalformedDataException;
import io.gitlab.jfronny.commons.serialize.SerializeReader;
import io.gitlab.jfronny.commons.serialize.SerializeWriter;
import io.gitlab.jfronny.commons.serialize.Token;
import io.gitlab.jfronny.commons.serialize.databind.SerializerFor;
import io.gitlab.jfronny.commons.serialize.databind.TypeAdapter;
import io.gitlab.jfronny.commons.serialize.databind.api.SerializerFor;
import io.gitlab.jfronny.commons.serialize.databind.api.TypeAdapter;
import io.gitlab.jfronny.muscript.data.additional.DFinal;
import io.gitlab.jfronny.muscript.data.dynamic.DList;
import io.gitlab.jfronny.muscript.data.dynamic.Dynamic;

View File

@ -3,8 +3,8 @@ package io.gitlab.jfronny.muscript.json.impl.typed;
import io.gitlab.jfronny.commons.serialize.MalformedDataException;
import io.gitlab.jfronny.commons.serialize.SerializeReader;
import io.gitlab.jfronny.commons.serialize.SerializeWriter;
import io.gitlab.jfronny.commons.serialize.databind.SerializerFor;
import io.gitlab.jfronny.commons.serialize.databind.TypeAdapter;
import io.gitlab.jfronny.commons.serialize.databind.api.SerializerFor;
import io.gitlab.jfronny.commons.serialize.databind.api.TypeAdapter;
import io.gitlab.jfronny.muscript.data.dynamic.DNull;
@SerializerFor(targets = DNull.class, hierarchical = true)

View File

@ -3,8 +3,8 @@ package io.gitlab.jfronny.muscript.json.impl.typed;
import io.gitlab.jfronny.commons.serialize.MalformedDataException;
import io.gitlab.jfronny.commons.serialize.SerializeReader;
import io.gitlab.jfronny.commons.serialize.SerializeWriter;
import io.gitlab.jfronny.commons.serialize.databind.SerializerFor;
import io.gitlab.jfronny.commons.serialize.databind.TypeAdapter;
import io.gitlab.jfronny.commons.serialize.databind.api.SerializerFor;
import io.gitlab.jfronny.commons.serialize.databind.api.TypeAdapter;
import io.gitlab.jfronny.muscript.data.additional.DFinal;
import io.gitlab.jfronny.muscript.data.dynamic.DNumber;

View File

@ -4,8 +4,8 @@ import io.gitlab.jfronny.commons.serialize.MalformedDataException;
import io.gitlab.jfronny.commons.serialize.SerializeReader;
import io.gitlab.jfronny.commons.serialize.SerializeWriter;
import io.gitlab.jfronny.commons.serialize.Token;
import io.gitlab.jfronny.commons.serialize.databind.SerializerFor;
import io.gitlab.jfronny.commons.serialize.databind.TypeAdapter;
import io.gitlab.jfronny.commons.serialize.databind.api.SerializerFor;
import io.gitlab.jfronny.commons.serialize.databind.api.TypeAdapter;
import io.gitlab.jfronny.muscript.data.additional.DFinal;
import io.gitlab.jfronny.muscript.data.dynamic.DObject;
import io.gitlab.jfronny.muscript.data.dynamic.Dynamic;

View File

@ -4,8 +4,8 @@ import io.gitlab.jfronny.commons.serialize.MalformedDataException;
import io.gitlab.jfronny.commons.serialize.SerializeReader;
import io.gitlab.jfronny.commons.serialize.SerializeWriter;
import io.gitlab.jfronny.commons.serialize.Token;
import io.gitlab.jfronny.commons.serialize.databind.SerializerFor;
import io.gitlab.jfronny.commons.serialize.databind.TypeAdapter;
import io.gitlab.jfronny.commons.serialize.databind.api.SerializerFor;
import io.gitlab.jfronny.commons.serialize.databind.api.TypeAdapter;
import io.gitlab.jfronny.muscript.data.additional.DFinal;
import io.gitlab.jfronny.muscript.data.dynamic.DString;
import io.gitlab.jfronny.muscript.json.impl.DynamicTypeAdapterHolder;

View File

@ -3,8 +3,8 @@ package io.gitlab.jfronny.muscript.json.impl.typed;
import io.gitlab.jfronny.commons.serialize.MalformedDataException;
import io.gitlab.jfronny.commons.serialize.SerializeReader;
import io.gitlab.jfronny.commons.serialize.SerializeWriter;
import io.gitlab.jfronny.commons.serialize.databind.SerializerFor;
import io.gitlab.jfronny.commons.serialize.databind.TypeAdapter;
import io.gitlab.jfronny.commons.serialize.databind.api.SerializerFor;
import io.gitlab.jfronny.commons.serialize.databind.api.TypeAdapter;
import io.gitlab.jfronny.muscript.data.dynamic.DynamicBase;
@SerializerFor(targets = DynamicBase.class, hierarchical = true)

View File

@ -3,8 +3,8 @@ package io.gitlab.jfronny.muscript.json.impl.typed.additional;
import io.gitlab.jfronny.commons.serialize.MalformedDataException;
import io.gitlab.jfronny.commons.serialize.SerializeReader;
import io.gitlab.jfronny.commons.serialize.SerializeWriter;
import io.gitlab.jfronny.commons.serialize.databind.SerializerFor;
import io.gitlab.jfronny.commons.serialize.databind.TypeAdapter;
import io.gitlab.jfronny.commons.serialize.databind.api.SerializerFor;
import io.gitlab.jfronny.commons.serialize.databind.api.TypeAdapter;
import io.gitlab.jfronny.muscript.data.additional.DDate;
import java.time.LocalDate;

View File

@ -3,8 +3,8 @@ package io.gitlab.jfronny.muscript.json.impl.typed.additional;
import io.gitlab.jfronny.commons.serialize.MalformedDataException;
import io.gitlab.jfronny.commons.serialize.SerializeReader;
import io.gitlab.jfronny.commons.serialize.SerializeWriter;
import io.gitlab.jfronny.commons.serialize.databind.SerializerFor;
import io.gitlab.jfronny.commons.serialize.databind.TypeAdapter;
import io.gitlab.jfronny.commons.serialize.databind.api.SerializerFor;
import io.gitlab.jfronny.commons.serialize.databind.api.TypeAdapter;
import io.gitlab.jfronny.muscript.data.additional.DEnum;
@SerializerFor(targets = DEnum.class, hierarchical = true)

View File

@ -3,8 +3,8 @@ package io.gitlab.jfronny.muscript.json.impl.typed.additional;
import io.gitlab.jfronny.commons.serialize.MalformedDataException;
import io.gitlab.jfronny.commons.serialize.SerializeReader;
import io.gitlab.jfronny.commons.serialize.SerializeWriter;
import io.gitlab.jfronny.commons.serialize.databind.SerializerFor;
import io.gitlab.jfronny.commons.serialize.databind.TypeAdapter;
import io.gitlab.jfronny.commons.serialize.databind.api.SerializerFor;
import io.gitlab.jfronny.commons.serialize.databind.api.TypeAdapter;
import io.gitlab.jfronny.muscript.data.additional.DTime;
import java.time.LocalTime;

View File

@ -3,7 +3,7 @@ module io.gitlab.jfronny.commons.muscript.json {
requires io.gitlab.jfronny.commons.muscript.data.additional;
requires io.gitlab.jfronny.commons.muscript.data;
requires io.gitlab.jfronny.commons.serialize.json;
requires io.gitlab.jfronny.commons.serialize.databind;
requires io.gitlab.jfronny.commons.serialize;
requires io.gitlab.jfronny.commons.serialize.databind.api;
exports io.gitlab.jfronny.muscript.json;
}