34 lines
1.5 KiB
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);
|
|
}
|
|
}
|
|
};
|
|
}
|
|
}
|