package org.zalando.riptide;
import com.google.common.reflect.TypeToken;
import org.springframework.http.client.ClientHttpResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
@FunctionalInterface
public interface Navigator<A> {
default TypeToken<A> getType() {
return new TypeToken<A>(getClass()) {};
}
Optional<Route> navigate(final ClientHttpResponse response, final RoutingTree<A> tree) throws IOException;
default List<Binding<A>> merge(final List<Binding<A>> present, final List<Binding<A>> additional) {
final Map<A, Binding<A>> bindings = new LinkedHashMap<>(present.size() + additional.size());
present.forEach(binding -> bindings.put(binding.getAttribute(), binding));
additional.forEach(binding -> bindings.put(binding.getAttribute(), binding));
return new ArrayList<>(bindings.values());
}
}