From b2cad067fdd95e1079e2e4212d159fac74d327a8 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Mon, 10 May 2021 16:29:37 +0200 Subject: [PATCH] [HttpClient] Add `DecoratorTrait` to ease writing simple decorators --- AsyncDecoratorTrait.php | 19 +------------- CHANGELOG.md | 1 + DecoratorTrait.php | 58 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 60 insertions(+), 18 deletions(-) create mode 100644 DecoratorTrait.php diff --git a/AsyncDecoratorTrait.php b/AsyncDecoratorTrait.php index 2e62673..aff402d 100644 --- a/AsyncDecoratorTrait.php +++ b/AsyncDecoratorTrait.php @@ -13,7 +13,6 @@ 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; @@ -24,12 +23,7 @@ */ trait AsyncDecoratorTrait { - private $client; - - public function __construct(HttpClientInterface $client = null) - { - $this->client = $client ?? HttpClient::create(); - } + use DecoratorTrait; /** * {@inheritdoc} @@ -51,15 +45,4 @@ public function stream($responses, float $timeout = null): ResponseStreamInterfa return new ResponseStream(AsyncResponse::stream($responses, $timeout, static::class)); } - - /** - * {@inheritdoc} - */ - public function withOptions(array $options): self - { - $clone = clone $this; - $clone->client = $this->client->withOptions($options); - - return $clone; - } } diff --git a/CHANGELOG.md b/CHANGELOG.md index 3b97488..c0e6fc8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ CHANGELOG --- * Implement `HttpClientInterface::withOptions()` from `symfony/contracts` v2.4 + * Add `DecoratorTrait` to ease writing simple decorators 5.2.0 ----- diff --git a/DecoratorTrait.php b/DecoratorTrait.php new file mode 100644 index 0000000..cc5a2fe --- /dev/null +++ b/DecoratorTrait.php @@ -0,0 +1,58 @@ + + * + * 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\Contracts\HttpClient\HttpClientInterface; +use Symfony\Contracts\HttpClient\ResponseInterface; +use Symfony\Contracts\HttpClient\ResponseStreamInterface; + +/** + * Eases with writing decorators. + * + * @author Nicolas Grekas + */ +trait DecoratorTrait +{ + private $client; + + public function __construct(HttpClientInterface $client = null) + { + $this->client = $client ?? HttpClient::create(); + } + + /** + * {@inheritdoc} + */ + public function request(string $method, string $url, array $options = []): ResponseInterface + { + return $this->client->request($method, $url, $options); + } + + /** + * {@inheritdoc} + */ + public function stream($responses, float $timeout = null): ResponseStreamInterface + { + return $this->client->stream($responses, $timeout); + } + + /** + * {@inheritdoc} + */ + public function withOptions(array $options): self + { + $clone = clone $this; + $clone->client = $this->client->withOptions($options); + + return $clone; + } +}