39 lines
1.6 KiB
Java
39 lines
1.6 KiB
Java
package io.gitlab.jfronny.commons.serialize.databind.api;
|
|
|
|
import io.gitlab.jfronny.commons.serialize.MalformedDataException;
|
|
import io.gitlab.jfronny.commons.serialize.SerializeReader;
|
|
import io.gitlab.jfronny.commons.serialize.SerializeWriter;
|
|
|
|
/**
|
|
* A type adapter for serializing and deserializing objects of a specific type.
|
|
*
|
|
* @param <T> The type of the object to serialize/deserialize
|
|
*/
|
|
public abstract class TypeAdapter<T> {
|
|
public abstract <TEx extends Throwable, Writer extends SerializeWriter<TEx, Writer>> void serialize(T value, Writer writer) throws TEx, MalformedDataException;
|
|
public abstract <TEx extends Throwable, Reader extends SerializeReader<TEx, Reader>> T deserialize(Reader reader) throws TEx, MalformedDataException;
|
|
|
|
public final TypeAdapter<T> nullSafe() {
|
|
return new TypeAdapter<>() {
|
|
@Override
|
|
public <TEx extends Throwable, Writer extends SerializeWriter<TEx, Writer>> void serialize(T value, Writer writer) throws TEx, MalformedDataException {
|
|
if (value == null) {
|
|
writer.nullValue();
|
|
} else {
|
|
TypeAdapter.this.serialize(value, writer);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public <TEx extends Throwable, Reader extends SerializeReader<TEx, Reader>> T deserialize(Reader reader) throws TEx, MalformedDataException {
|
|
if (reader.peek() == null) {
|
|
reader.nextNull();
|
|
return null;
|
|
} else {
|
|
return TypeAdapter.this.deserialize(reader);
|
|
}
|
|
}
|
|
};
|
|
}
|
|
}
|