Respackopts/src/main/java/io/gitlab/jfronny/respackopts/gson/ConditionDeserializer.java

29 lines
1.4 KiB
Java

package io.gitlab.jfronny.respackopts.gson;
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.api.SerializerFor;
import io.gitlab.jfronny.commons.serialize.databind.api.TypeAdapter;
import io.gitlab.jfronny.muscript.ast.context.ExprUtils;
import io.gitlab.jfronny.respackopts.model.Condition;
@SerializerFor(targets = Condition.class)
public class ConditionDeserializer extends TypeAdapter<Condition> {
@Override
public <TEx extends Exception, Writer extends SerializeWriter<TEx, Writer>> void serialize(Condition condition, Writer writer) throws TEx, MalformedDataException {
BoolExprDeserializer.INSTANCE.serialize(condition.expr(), writer);
}
@Override
public <TEx extends Exception, Reader extends SerializeReader<TEx, Reader>> Condition deserialize(Reader reader) throws TEx, MalformedDataException {
String source = "Source unavailable";
if (reader.peek() == Token.STRING) {
source = reader.nextString();
return new Condition(source, null, ExprUtils.asBool(ExprDeserializer.INSTANCE.parse(source)));
}
return new Condition(source, null, BoolExprDeserializer.INSTANCE.deserialize(reader));
}
}