81 lines
1.9 KiB
PHP
81 lines
1.9 KiB
PHP
<?php
|
|
|
|
/*
|
|
* This file is part of the Symfony package.
|
|
*
|
|
* (c) Fabien Potencier <fabien@symfony.com>
|
|
*
|
|
* For the full copyright and license information, please view the LICENSE
|
|
* file that was distributed with this source code.
|
|
*/
|
|
|
|
namespace Symfony\Component\HttpClient\Response;
|
|
|
|
use GuzzleHttp\Promise\Create;
|
|
use GuzzleHttp\Promise\PromiseInterface as GuzzlePromiseInterface;
|
|
use Http\Promise\Promise as HttplugPromiseInterface;
|
|
use Psr\Http\Message\ResponseInterface as Psr7ResponseInterface;
|
|
|
|
/**
|
|
* @author Tobias Nyholm <tobias.nyholm@gmail.com>
|
|
*
|
|
* @internal
|
|
*/
|
|
final class HttplugPromise implements HttplugPromiseInterface
|
|
{
|
|
private $promise;
|
|
|
|
public function __construct(GuzzlePromiseInterface $promise)
|
|
{
|
|
$this->promise = $promise;
|
|
}
|
|
|
|
public function then(callable $onFulfilled = null, callable $onRejected = null): self
|
|
{
|
|
return new self($this->promise->then(
|
|
$this->wrapThenCallback($onFulfilled),
|
|
$this->wrapThenCallback($onRejected)
|
|
));
|
|
}
|
|
|
|
public function cancel(): void
|
|
{
|
|
$this->promise->cancel();
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function getState(): string
|
|
{
|
|
return $this->promise->getState();
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*
|
|
* @return Psr7ResponseInterface|mixed
|
|
*/
|
|
public function wait($unwrap = true): mixed
|
|
{
|
|
$result = $this->promise->wait($unwrap);
|
|
|
|
while ($result instanceof HttplugPromiseInterface || $result instanceof GuzzlePromiseInterface) {
|
|
$result = $result->wait($unwrap);
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
|
|
private function wrapThenCallback(?callable $callback): ?callable
|
|
{
|
|
if (null === $callback) {
|
|
return null;
|
|
}
|
|
|
|
return static function ($value) use ($callback) {
|
|
return Create::promiseFor($callback($value));
|
|
};
|
|
}
|
|
}
|