102 lines
3.9 KiB
Java
102 lines
3.9 KiB
Java
|
package com.esotericsoftware.kryo.serializers;
|
||
|
|
||
|
import com.esotericsoftware.kryo.Kryo;
|
||
|
import com.esotericsoftware.kryo.Serializer;
|
||
|
import com.esotericsoftware.kryo.io.Input;
|
||
|
import com.esotericsoftware.kryo.io.Output;
|
||
|
import com.esotericsoftware.kryo.util.Util;
|
||
|
import java.util.Optional;
|
||
|
import java.util.OptionalDouble;
|
||
|
import java.util.OptionalInt;
|
||
|
import java.util.OptionalLong;
|
||
|
public final class OptionalSerializers {
|
||
|
|
||
|
public static class OptionalDoubleSerializer extends Serializer<OptionalDouble> {
|
||
|
private OptionalDoubleSerializer() {
|
||
|
setImmutable(true);
|
||
|
}
|
||
|
|
||
|
@Override // com.esotericsoftware.kryo.Serializer
|
||
|
public OptionalDouble read(Kryo kryo, Input input, Class<OptionalDouble> cls) {
|
||
|
return input.readBoolean() ? OptionalDouble.of(input.readDouble()) : OptionalDouble.empty();
|
||
|
}
|
||
|
|
||
|
public void write(Kryo kryo, Output output, OptionalDouble optionalDouble) {
|
||
|
output.writeBoolean(optionalDouble.isPresent());
|
||
|
if (optionalDouble.isPresent()) {
|
||
|
output.writeDouble(optionalDouble.getAsDouble());
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public static class OptionalIntSerializer extends Serializer<OptionalInt> {
|
||
|
private OptionalIntSerializer() {
|
||
|
setImmutable(true);
|
||
|
}
|
||
|
|
||
|
@Override // com.esotericsoftware.kryo.Serializer
|
||
|
public OptionalInt read(Kryo kryo, Input input, Class<OptionalInt> cls) {
|
||
|
return input.readBoolean() ? OptionalInt.of(input.readInt()) : OptionalInt.empty();
|
||
|
}
|
||
|
|
||
|
public void write(Kryo kryo, Output output, OptionalInt optionalInt) {
|
||
|
output.writeBoolean(optionalInt.isPresent());
|
||
|
if (optionalInt.isPresent()) {
|
||
|
output.writeInt(optionalInt.getAsInt());
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public static class OptionalLongSerializer extends Serializer<OptionalLong> {
|
||
|
private OptionalLongSerializer() {
|
||
|
setImmutable(true);
|
||
|
}
|
||
|
|
||
|
@Override // com.esotericsoftware.kryo.Serializer
|
||
|
public OptionalLong read(Kryo kryo, Input input, Class<OptionalLong> cls) {
|
||
|
return input.readBoolean() ? OptionalLong.of(input.readLong()) : OptionalLong.empty();
|
||
|
}
|
||
|
|
||
|
public void write(Kryo kryo, Output output, OptionalLong optionalLong) {
|
||
|
output.writeBoolean(optionalLong.isPresent());
|
||
|
if (optionalLong.isPresent()) {
|
||
|
output.writeLong(optionalLong.getAsLong());
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public static class OptionalSerializer extends Serializer<Optional> {
|
||
|
private OptionalSerializer() {
|
||
|
setAcceptsNull(false);
|
||
|
}
|
||
|
|
||
|
public Optional copy(Kryo kryo, Optional optional) {
|
||
|
return optional.isPresent() ? Optional.of(kryo.copy(optional.get())) : optional;
|
||
|
}
|
||
|
|
||
|
@Override // com.esotericsoftware.kryo.Serializer
|
||
|
public Optional read(Kryo kryo, Input input, Class<Optional> cls) {
|
||
|
return Optional.ofNullable(kryo.readClassAndObject(input));
|
||
|
}
|
||
|
|
||
|
public void write(Kryo kryo, Output output, Optional optional) {
|
||
|
kryo.writeClassAndObject(output, optional.isPresent() ? optional.get() : null);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public static void addDefaultSerializers(Kryo kryo) {
|
||
|
if (Util.isClassAvailable("java.util.Optional")) {
|
||
|
kryo.addDefaultSerializer(Optional.class, new OptionalSerializer());
|
||
|
}
|
||
|
if (Util.isClassAvailable("java.util.OptionalInt")) {
|
||
|
kryo.addDefaultSerializer(OptionalInt.class, new OptionalIntSerializer());
|
||
|
}
|
||
|
if (Util.isClassAvailable("java.util.OptionalLong")) {
|
||
|
kryo.addDefaultSerializer(OptionalLong.class, new OptionalLongSerializer());
|
||
|
}
|
||
|
if (Util.isClassAvailable("java.util.OptionalDouble")) {
|
||
|
kryo.addDefaultSerializer(OptionalDouble.class, new OptionalDoubleSerializer());
|
||
|
}
|
||
|
}
|
||
|
}
|