class GraphItemImpl implements GraphItem, Serializable {

    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }

        GraphItemImpl graphItem = (GraphItemImpl) o;
        // quick fail on different hashcode, to avoid manually comparing the children nodes
        return hashcode == graphItem.hashcode
                && Objects.equals(address, graphItem.address)
                && Objects.equals(dependencies, graphItem.dependencies);

    }

    public  GraphItemImpl(
            @NonNull String address,
            @NonNull List<GraphItem> dependencies);

}