public static LoadBalancer fromJson(byte[] data) {
Cursor object = SlimeUtils.jsonToSlime(data).get();
Set<Real> reals = new LinkedHashSet<>();
object.field(realsField).traverse((ArrayTraverser) (i, realObject) -> {
reals.add(new Real(HostName.from(realObject.field(hostnameField).asString()),
realObject.field(ipAddressField).asString(),
(int) realObject.field(portField).asLong()));
});
Set<Integer> ports = new LinkedHashSet<>();
object.field(portsField).traverse((ArrayTraverser) (i, port) -> ports.add((int) port.asLong()));
Set<String> networks = new LinkedHashSet<>();
object.field(networksField).traverse((ArrayTraverser) (i, network) -> networks.add(network.asString()));
Set<RotationName> rotations = new LinkedHashSet<>();
object.field(rotationsField).traverse((ArrayTraverser) (i, rotation) -> {
rotations.add(RotationName.from(rotation.field(nameField).asString()));
});
return new LoadBalancer(LoadBalancerId.fromSerializedForm(object.field(idField).asString()),
HostName.from(object.field(hostnameField).asString()),
optionalField(object.field(dnsZoneField), DnsZone::new),
ports,
networks,
reals,
rotations,
object.field(inactiveField).asBool());
}