
io.activej.crdt.json.JsonCodecs Maven / Gradle / Ivy
package io.activej.crdt.json;
import io.activej.common.StringFormatUtils;
import io.activej.common.exception.MalformedDataException;
import io.activej.crdt.CrdtData;
import io.activej.crdt.CrdtEntity;
import io.activej.crdt.storage.cluster.PartitionId;
import io.activej.crdt.storage.cluster.RendezvousPartitionGroup;
import io.activej.json.JsonCodec;
import io.activej.json.JsonValidationException;
import java.net.InetSocketAddress;
import static io.activej.json.JsonCodecs.*;
public class JsonCodecs {
public static , S> JsonCodec> ofCrdtData(JsonCodec keyCodec, JsonCodec stateCodec) {
return ofObject(CrdtData::new,
"key", CrdtEntity::getKey, keyCodec,
"timestamp", CrdtData::getTimestamp, ofLong(),
"state", CrdtData::getState, stateCodec);
}
public static JsonCodec ofInetSocketAddress() {
return transform(ofString(),
value -> value.getAddress().getHostAddress() + ":" + value.getPort(),
string -> {
try {
return StringFormatUtils.parseInetSocketAddressResolving(string);
} catch (MalformedDataException e) {
throw new JsonValidationException(e.getMessage());
}
});
}
public static JsonCodec ofPartitionId() {
return ofObject(PartitionId::of,
"id", PartitionId::getId, ofString(),
"crdtAddress", PartitionId::getCrdtAddress, ofInetSocketAddress(),
"rpcAddress", PartitionId::getRpcAddress, ofInetSocketAddress()
);
}
public static JsonCodec> ofRendezvousPartitionGroup(JsonCodec idCodec) {
return ofObject(RendezvousPartitionGroup::create,
"ids", RendezvousPartitionGroup::getPartitionIds, ofSet(idCodec),
"replicaCount", RendezvousPartitionGroup::getReplicaCount, ofInteger(),
"repartition", RendezvousPartitionGroup::isRepartition, ofBoolean(),
"active", RendezvousPartitionGroup::isActive, ofBoolean());
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy