package io.trygvis.rules.network; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.io.IOException; import java.util.Objects; @JsonSerialize(using = Ipv4Address.Serializer.class) public class Ipv4Address implements Comparable { public final int address; public Ipv4Address(int address) { this.address = address; } @Override public boolean equals(Object o) { if (this == o) return true; if (o instanceof Ipv4Address) { Ipv4Address other = (Ipv4Address) o; return address == other.address; } return false; } @Override public int hashCode() { return Objects.hash(address); } @Override public int compareTo(Ipv4Address o) { return address - o.address; } @Override public String toString() { return "%d.%d.%d.%d".formatted( address >> 24 & 0xff, address >> 16 & 0xff, address >> 8 & 0xff, address & 0xff); } public static class Serializer extends JsonSerializer { @Override public void serialize(Ipv4Address value, JsonGenerator gen, SerializerProvider serializers) throws IOException { gen.writeStartObject(); gen.writeObjectField("value", value.toString()); gen.writeEndObject(); } } }