Respackopts/src/main/java/io/gitlab/jfronny/respackopts/gson/entry/ConfigBranchSerializer.java

38 lines
1.6 KiB
Java

package io.gitlab.jfronny.respackopts.gson.entry;
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.respackopts.model.tree.*;
import java.util.Map;
@SerializerFor(targets = ConfigBranch.class)
public class ConfigBranchSerializer extends TypeAdapter<ConfigBranch> {
@Override
public <TEx extends Exception, Writer extends SerializeWriter<TEx, Writer>> void serialize(ConfigBranch configBranch, Writer writer) throws TEx, MalformedDataException {
writer.beginObject();
for (Map.Entry<String, ConfigEntry<?>> entry : configBranch.getValue().entrySet()) {
writer.name(entry.getKey());
GC_ConfigEntry.serialize(entry.getValue(), writer);
}
writer.endObject();
}
@Override
public <TEx extends Exception, Reader extends SerializeReader<TEx, Reader>> ConfigBranch deserialize(Reader reader) throws TEx, MalformedDataException {
if (reader.peek() != Token.BEGIN_OBJECT) throw new MalformedDataException("ConfigBranch is not an object");
reader.beginObject();
ConfigBranch cbNew = new ConfigBranch();
while (reader.hasNext()) {
String s = reader.nextName();
cbNew.add(s, GC_ConfigEntry.deserialize(reader));
}
reader.endObject();
return cbNew;
}
}