package openmods.serializable; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; import openmods.reflection.ConstructorAccess; import openmods.utils.io.IStreamReader; import openmods.utils.io.IStreamSerializer; public class SerializerAdapters { public static <T extends IStreamWriteable & IStreamReadable> IStreamSerializer<T> createFromFactory(final IInstanceFactory<T> factory) { return new IStreamSerializer<T>() { @Override public T readFromStream(DataInput input) throws IOException { T instance = factory.create(); instance.readFromStream(input); return instance; } @Override public void writeToStream(T o, DataOutput output) throws IOException { o.writeToStream(output); } }; } public static <T extends IStreamWriteable> IStreamSerializer<T> createFromReader(final IStreamReader<T> reader) { return new IStreamSerializer<T>() { @Override public T readFromStream(DataInput input) throws IOException { return reader.readFromStream(input); } @Override public void writeToStream(T o, DataOutput output) throws IOException { o.writeToStream(output); } }; } public static <T> IStreamSerializer<T> createFromObjectSerializer(final IInstanceFactory<T> factory, final IObjectSerializer<T> serializer) { return new IStreamSerializer<T>() { @Override public T readFromStream(DataInput input) throws IOException { T object = factory.create(); serializer.readFromStream(object, input); return object; } @Override public void writeToStream(T o, DataOutput output) throws IOException { serializer.writeToStream(o, output); } }; } public static <T> IStreamSerializer<T> createFromObjectSerializer(Class<? extends T> cls, IObjectSerializer<T> serializer) { IInstanceFactory<T> factory = ConstructorAccess.create(cls); return createFromObjectSerializer(factory, serializer); } }