29 lines
1.4 KiB
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));
|
|
}
|
|
}
|