package org.zalando.riptide; import org.springframework.http.client.ClientHttpResponse; import javax.annotation.Nullable; import java.io.IOException; import java.util.Optional; public interface EqualityNavigator<A> extends Navigator<A> { /** * Retrieves an attribute from the given response * * @param response the incoming response * @return an attribute based on the response which is then used to select the correct binding * @throws IOException if accessing the response failed */ @Nullable A attributeOf(final ClientHttpResponse response) throws IOException; @Override default Optional<Route> navigate(final ClientHttpResponse response, final RoutingTree<A> tree) throws IOException { @Nullable final A attribute = attributeOf(response); return navigate(attribute, tree); } default Optional<Route> navigate(@Nullable final A attribute, final RoutingTree<A> tree) throws IOException { return attribute == null ? tree.getWildcard() : tree.get(attribute); } }