diff --git a/src/Builder/Client.php b/src/Builder/Client.php index 3af1458..3b69d2c 100644 --- a/src/Builder/Client.php +++ b/src/Builder/Client.php @@ -19,7 +19,7 @@ final class Client implements Builder private ?Node\Expr $httpStreamFactory = null; private ?Node\Expr $fileSystem = null; - public function __construct(private readonly Node\Expr $baseUrl, private readonly Node\Expr $clientId, private readonly Node\Expr $secret) + public function __construct(private readonly Node\Expr $baseUrl, private readonly Node\Expr $clientId, private readonly Node\Expr $secret, private readonly null|Node\Expr $apiType) { } @@ -69,15 +69,7 @@ public function withFileSystem(Node\Expr $fileSystem): self public function getNode(): Node\Expr\MethodCall { - $instance = new Node\Expr\MethodCall( - var: new Node\Expr\New_( - new Node\Name\FullyQualified('Diglin\\Sylius\\ApiClient\\SyliusClientBuilder'), - ), - name: new Node\Identifier('setBaseUri'), - args: [ - new Node\Arg($this->baseUrl), - ], - ); + $instance = $this->getClientBuilderNode(); if (null !== $this->httpClient) { $instance = new Node\Expr\MethodCall( @@ -126,6 +118,26 @@ public function getNode(): Node\Expr\MethodCall ); } + private function getClientBuilderNode(): Node\Expr\MethodCall + { + $className = match ($this->apiType) { + 'admin' => 'Diglin\\Sylius\\ApiClient\\SyliusAdminClientBuilder', + 'store' => 'Diglin\\Sylius\\ApiClient\\SyliusShopClientBuilder', + 'legacy' => 'Diglin\\Sylius\\ApiClient\\SyliusClientBuilder', + default => 'Diglin\\Sylius\\ApiClient\\SyliusClientBuilder', + }; + + return new Node\Expr\MethodCall( + var: new Node\Expr\New_( + new Node\Name\FullyQualified($className), + ), + name: new Node\Identifier('setBaseUri'), + args: [ + new Node\Arg($this->baseUrl), + ], + ); + } + private function getFactoryMethod(): string { if (null !== $this->password) { diff --git a/src/Configuration/Client.php b/src/Configuration/Client.php index bd4840f..9182b63 100644 --- a/src/Configuration/Client.php +++ b/src/Configuration/Client.php @@ -67,6 +67,14 @@ public function getConfigTreeBuilder(): \Symfony\Component\Config\Definition\Bui ->end() ->end() ->end() + ->scalarNode('api_type') + ->isRequired() + ->cannotBeEmpty() + ->validate() + ->ifTrue(isExpression()) + ->then(asExpression()) + ->end() + ->end() ->scalarNode('api_url') ->isRequired() ->cannotBeEmpty() diff --git a/src/Factory/Client.php b/src/Factory/Client.php index 5c61386..d5dfd5c 100644 --- a/src/Factory/Client.php +++ b/src/Factory/Client.php @@ -74,6 +74,7 @@ public function compile(array $config): Repository\Client compileValueWhenExpression($this->interpreter, $config['api_url']), compileValueWhenExpression($this->interpreter, $config['client_id']), compileValueWhenExpression($this->interpreter, $config['secret']), + compileValueWhenExpression($this->interpreter, $config['api_type']), ); if (isset($config['context'])) {