/** * Get an address for the given request. * * @param AddressRequestInterface $request * @return AddressInterface[] * @throws InvalidAddressException when an adapter returned an invalid * address entity. * @throws AddressNotFoundException when no address can be found. */ public function getAddresses(AddressRequestInterface $request) { $adapter = null; $adapters = $this->adapterFactory->create($request); $addresses = []; foreach ($adapters as $adapter) { $addresses = $adapter->getAddresses($request); if (!empty($addresses)) { break; } } if (empty($addresses)) { throw new AddressNotFoundException('Could not find an address for the given request.'); } foreach ($addresses as $address) { if (!$address instanceof AddressInterface) { throw new InvalidAddressException(sprintf('Invalid address %s supplied by adapter: %s', get_class($address), get_class($adapter))); } } return array_slice($addresses, 0, $this->config->getMaxSuggestions()); }