java-commons/commons-serialize-databind/src/main/java/io/gitlab/jfronny/commons/serialize/databind/TypeAdapter.java

34 lines
1.5 KiB
Java

package io.gitlab.jfronny.commons.serialize.databind;
import io.gitlab.jfronny.commons.serialize.stream.MalformedDataException;
import io.gitlab.jfronny.commons.serialize.stream.SerializeReader;
import io.gitlab.jfronny.commons.serialize.stream.SerializeWriter;
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);
}
}
};
}
}