* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\HttpClient; use Symfony\Component\HttpClient\Response\AsyncResponse; use Symfony\Component\HttpClient\Response\ResponseStream; use Symfony\Contracts\HttpClient\HttpClientInterface; use Symfony\Contracts\HttpClient\ResponseInterface; use Symfony\Contracts\HttpClient\ResponseStreamInterface; /** * Eases with processing responses while streaming them. * * @author Nicolas Grekas */ trait AsyncDecoratorTrait { private $client; public function __construct(HttpClientInterface $client = null) { $this->client = $client ?? HttpClient::create(); } /** * {@inheritdoc} * * @return AsyncResponse */ abstract public function request(string $method, string $url, array $options = []): ResponseInterface; /** * {@inheritdoc} */ public function stream($responses, float $timeout = null): ResponseStreamInterface { if ($responses instanceof AsyncResponse) { $responses = [$responses]; } elseif (!is_iterable($responses)) { throw new \TypeError(sprintf('"%s()" expects parameter 1 to be an iterable of AsyncResponse objects, "%s" given.', __METHOD__, get_debug_type($responses))); } return new ResponseStream(AsyncResponse::stream($responses, $timeout, static::class)); } }