Initial Commit
This commit is contained in:
227
dependencies/amphp/http-client/src/Response.php
vendored
Normal file
227
dependencies/amphp/http-client/src/Response.php
vendored
Normal file
@ -0,0 +1,227 @@
|
||||
<?php
|
||||
|
||||
namespace WP_Ultimo\Dependencies\Amp\Http\Client;
|
||||
|
||||
use WP_Ultimo\Dependencies\Amp\ByteStream\InMemoryStream;
|
||||
use WP_Ultimo\Dependencies\Amp\ByteStream\InputStream;
|
||||
use WP_Ultimo\Dependencies\Amp\ByteStream\Payload;
|
||||
use WP_Ultimo\Dependencies\Amp\Http\Client\Internal\ForbidCloning;
|
||||
use WP_Ultimo\Dependencies\Amp\Http\Client\Internal\ForbidSerialization;
|
||||
use WP_Ultimo\Dependencies\Amp\Http\Message;
|
||||
use WP_Ultimo\Dependencies\Amp\Http\Status;
|
||||
use WP_Ultimo\Dependencies\Amp\Promise;
|
||||
use WP_Ultimo\Dependencies\Amp\Success;
|
||||
/**
|
||||
* An HTTP response.
|
||||
*/
|
||||
final class Response extends Message
|
||||
{
|
||||
use ForbidSerialization;
|
||||
use ForbidCloning;
|
||||
/** @var string */
|
||||
private $protocolVersion;
|
||||
/** @var int */
|
||||
private $status;
|
||||
/** @var string */
|
||||
private $reason;
|
||||
/** @var Request */
|
||||
private $request;
|
||||
/** @var Payload */
|
||||
private $body;
|
||||
/** @var Promise<Trailers> */
|
||||
private $trailers;
|
||||
/** @var Response|null */
|
||||
private $previousResponse;
|
||||
public function __construct(string $protocolVersion, int $status, ?string $reason, array $headers, InputStream $body, Request $request, ?Promise $trailerPromise = null, ?Response $previousResponse = null)
|
||||
{
|
||||
$this->setProtocolVersion($protocolVersion);
|
||||
$this->setStatus($status, $reason);
|
||||
$this->setHeaders($headers);
|
||||
$this->setBody($body);
|
||||
$this->request = $request;
|
||||
/** @noinspection PhpUnhandledExceptionInspection */
|
||||
$this->trailers = $trailerPromise ?? new Success(new Trailers([]));
|
||||
$this->previousResponse = $previousResponse;
|
||||
}
|
||||
/**
|
||||
* Retrieve the requests's HTTP protocol version.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getProtocolVersion() : string
|
||||
{
|
||||
return $this->protocolVersion;
|
||||
}
|
||||
public function setProtocolVersion(string $protocolVersion) : void
|
||||
{
|
||||
if (!\in_array($protocolVersion, ["1.0", "1.1", "2"], \true)) {
|
||||
/** @noinspection PhpUndefinedClassInspection */
|
||||
throw new \Error("Invalid HTTP protocol version: " . $protocolVersion);
|
||||
}
|
||||
$this->protocolVersion = $protocolVersion;
|
||||
}
|
||||
/**
|
||||
* Retrieve the response's three-digit HTTP status code.
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getStatus() : int
|
||||
{
|
||||
return $this->status;
|
||||
}
|
||||
public function setStatus(int $status, ?string $reason = null) : void
|
||||
{
|
||||
$this->status = $status;
|
||||
$this->reason = $reason ?? Status::getReason($status);
|
||||
}
|
||||
/**
|
||||
* Retrieve the response's (possibly empty) reason phrase.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getReason() : string
|
||||
{
|
||||
return $this->reason;
|
||||
}
|
||||
/**
|
||||
* Retrieve the Request instance that resulted in this Response instance.
|
||||
*
|
||||
* @return Request
|
||||
*/
|
||||
public function getRequest() : Request
|
||||
{
|
||||
return $this->request;
|
||||
}
|
||||
public function setRequest(Request $request) : void
|
||||
{
|
||||
$this->request = $request;
|
||||
}
|
||||
/**
|
||||
* Retrieve the original Request instance associated with this Response instance.
|
||||
*
|
||||
* A given Response may be the result of one or more redirects. This method is a shortcut to
|
||||
* access information from the original Request that led to this response.
|
||||
*
|
||||
* @return Request
|
||||
*/
|
||||
public function getOriginalRequest() : Request
|
||||
{
|
||||
if (empty($this->previousResponse)) {
|
||||
return $this->request;
|
||||
}
|
||||
return $this->previousResponse->getOriginalRequest();
|
||||
}
|
||||
/**
|
||||
* Retrieve the original Response instance associated with this Response instance.
|
||||
*
|
||||
* A given Response may be the result of one or more redirects. This method is a shortcut to
|
||||
* access information from the original Response that led to this response.
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function getOriginalResponse() : Response
|
||||
{
|
||||
if (empty($this->previousResponse)) {
|
||||
return $this;
|
||||
}
|
||||
return $this->previousResponse->getOriginalResponse();
|
||||
}
|
||||
/**
|
||||
* If this Response is the result of a redirect traverse up the redirect history.
|
||||
*
|
||||
* @return Response|null
|
||||
*/
|
||||
public function getPreviousResponse() : ?Response
|
||||
{
|
||||
return $this->previousResponse;
|
||||
}
|
||||
public function setPreviousResponse(?Response $previousResponse) : void
|
||||
{
|
||||
$this->previousResponse = $previousResponse;
|
||||
}
|
||||
/**
|
||||
* Assign a value for the specified header field by replacing any existing values for that field.
|
||||
*
|
||||
* @param string $name Header name.
|
||||
* @param string|string[] $value Header value.
|
||||
*/
|
||||
public function setHeader(string $name, $value) : void
|
||||
{
|
||||
if (($name[0] ?? ":") === ":") {
|
||||
throw new \Error("Header name cannot be empty or start with a colon (:)");
|
||||
}
|
||||
parent::setHeader($name, $value);
|
||||
}
|
||||
/**
|
||||
* Assign a value for the specified header field by adding an additional header line.
|
||||
*
|
||||
* @param string $name Header name.
|
||||
* @param string|string[] $value Header value.
|
||||
*/
|
||||
public function addHeader(string $name, $value) : void
|
||||
{
|
||||
if (($name[0] ?? ":") === ":") {
|
||||
throw new \Error("Header name cannot be empty or start with a colon (:)");
|
||||
}
|
||||
parent::addHeader($name, $value);
|
||||
}
|
||||
public function setHeaders(array $headers) : void
|
||||
{
|
||||
/** @noinspection PhpUnhandledExceptionInspection */
|
||||
parent::setHeaders($headers);
|
||||
}
|
||||
/**
|
||||
* Remove the specified header field from the message.
|
||||
*
|
||||
* @param string $name Header name.
|
||||
*/
|
||||
public function removeHeader(string $name) : void
|
||||
{
|
||||
parent::removeHeader($name);
|
||||
}
|
||||
/**
|
||||
* Retrieve the response body.
|
||||
*
|
||||
* Note: If you stream a Message, you can't consume the payload twice.
|
||||
*
|
||||
* @return Payload
|
||||
*/
|
||||
public function getBody() : Payload
|
||||
{
|
||||
return $this->body;
|
||||
}
|
||||
/**
|
||||
* @param Payload|InputStream|string|int|float|bool $body
|
||||
*/
|
||||
public function setBody($body) : void
|
||||
{
|
||||
if ($body instanceof Payload) {
|
||||
$this->body = $body;
|
||||
} elseif ($body === null) {
|
||||
$this->body = new Payload(new InMemoryStream());
|
||||
} elseif (\is_string($body)) {
|
||||
$this->body = new Payload(new InMemoryStream($body));
|
||||
} elseif (\is_scalar($body)) {
|
||||
$this->body = new Payload(new InMemoryStream(\var_export($body, \true)));
|
||||
} elseif ($body instanceof InputStream) {
|
||||
$this->body = new Payload($body);
|
||||
} else {
|
||||
/** @noinspection PhpUndefinedClassInspection */
|
||||
throw new \TypeError("Invalid body type: " . \gettype($body));
|
||||
}
|
||||
}
|
||||
/**
|
||||
* @return Promise<Trailers>
|
||||
*/
|
||||
public function getTrailers() : Promise
|
||||
{
|
||||
return $this->trailers;
|
||||
}
|
||||
/**
|
||||
* @param Promise<Trailers> $promise
|
||||
*/
|
||||
public function setTrailers(Promise $promise) : void
|
||||
{
|
||||
$this->trailers = $promise;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user