/**
  * Factory method that creates an appropriate Exception object based on the
  * Response's status code. The message is constructed here also.
  *
  * @param \OpenStack\Common\Transport\RequestInterface  $request  The failed request
  * @param \OpenStack\Common\Transport\ResponseInterface $response The API's response
  * @return self
  */
 public static function create(RequestInterface $request, ResponseInterface $response)
 {
     $label = 'A HTTP error occurred';
     $status = $response->getStatusCode();
     $exceptions = [401 => 'UnauthorizedException', 403 => 'ForbiddenException', 404 => 'ResourceNotFoundException', 405 => 'MethodNotAllowedException', 409 => 'ConflictException', 411 => 'LengthRequiredException', 422 => 'UnprocessableEntityException', 500 => 'ServerException'];
     $message = sprintf("%s\n[Status] %s (%s)\n[URL] %s\n[Message] %s\n", $label, (string) $request->getUrl(), $status, $response->getReasonPhrase(), (string) $response->getBody());
     // Find custom exception class or use default
     $exceptionClass = isset($exceptions[$status]) ? sprintf("%s\\%s", __NAMESPACE__, $exceptions[$status]) : __CLASS__;
     return new $exceptionClass($message, $request, $response);
 }
 /**
  * @inheritDoc
  * @param \OpenStack\Common\Transport\RequestInterface $adapter
  * @return \OpenStack\Common\Transport\ResponseInterface
  * @throws \OpenStack\Common\Transport\Exception\RequestException
  * @throws \GuzzleHttp\Exception\RequestException
  */
 public function send(RequestInterface $adapter)
 {
     try {
         $guzzleResponse = $this->client->send($adapter->getMessage());
         return new ResponseAdapter($guzzleResponse);
     } catch (GuzzleRequestException $e) {
         // In order to satisfy {@see GuzzleHttp\ClientInterface}, Guzzle
         // wraps all exceptions in its own RequestException class. This is
         // not useful for our end-users, so we need to make sure our own
         // versions are returned (Guzzle buffers them).
         $previous = $e->getPrevious();
         if ($previous instanceof Exception\RequestException) {
             throw $previous;
         }
         throw $e;
     }
 }