blob: 04a334283227701c307df3629444e61c39c9d062 [file] [log] [blame] [raw]
package protocolsupport.protocol.utils.json;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import com.google.gson.JsonElement;
import protocolsupport.utils.CachedInstanceOfChain;
public class SimpleJsonTreeSerializer<M> {
public static class Builder<M> {
private final List<Map.Entry<Class<?>, SimpleJsonObjectSerializer<?, M>>> serializers = new ArrayList<>();
public <T> Builder<M> registerSerializer(Class<T> clazz, SimpleJsonObjectSerializer<T, M> serializer) {
this.serializers.add(Map.entry(clazz, serializer));
return this;
}
public SimpleJsonTreeSerializer<M> build() {
return new SimpleJsonTreeSerializer<>(serializers);
}
}
private final CachedInstanceOfChain<SimpleJsonObjectSerializer<Object, M>> serializers = new CachedInstanceOfChain<>();
@SuppressWarnings("unchecked")
public SimpleJsonTreeSerializer(List<Map.Entry<Class<?>, SimpleJsonObjectSerializer<?, M>>> serializers) {
for (Map.Entry<Class<?>, SimpleJsonObjectSerializer<?, M>> entry : serializers) {
this.serializers.setKnownPath(entry.getKey(), ((SimpleJsonObjectSerializer<Object, M>) entry.getValue()));
}
}
public JsonElement serialize(Object object, M metadata) {
return serializers.selectPath(object.getClass()).serialize(this, object, metadata);
}
}