district09/php_package_dg-api-client

View on GitHub
src/Client/Exception/InvalidResponse.php

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
<?php

declare(strict_types=1);

namespace DigipolisGent\API\Client\Exception;

use Psr\Http\Message\ResponseInterface;

/**
 * Exception thrown when the response is invalid.
 */
final class InvalidResponse extends Exception
{
    /**
     * @var string
     */
    protected string $body;

    /**
     * InvalidResponse constructor.
     *
     * @param string $message
     * @param string $body
     * @param int $code
     */
    public function __construct(string $message, string $body = '', int $code = 0)
    {
        $this->body = $body;
        parent::__construct($message, $code);
    }

    /**
     * Generates an Exception with a uniform message from a given request.
     *
     * @param \Psr\Http\Message\ResponseInterface $response
     *
     * @return \DigipolisGent\API\Client\Exception\InvalidResponse
     */
    public static function fromResponse(ResponseInterface $response): InvalidResponse
    {
        $body = (string) $response->getBody();
        $statusCode = $response->getStatusCode();
        return new self(
            sprintf(
                'Response with status code %s was unexpected : "%s".',
                $statusCode,
                $body
            ),
            $body,
            $statusCode
        );
    }

    /**
     * Get the response body.
     *
     * @return string
     */
    public function getBody(): string
    {
        return $this->body;
    }
}