Skip to content

Commit 826df66

Browse files
authored
Add support for configuring a custom error factory for a service (#1485)
1 parent 70dc363 commit 826df66

File tree

2 files changed

+23
-18
lines changed

2 files changed

+23
-18
lines changed

src/CodeGenerator/src/Command/GenerateCommand.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,7 @@ private function generateService(SymfonyStyle $io, InputInterface $input, array
278278
$paginationArray = $this->loadFile($manifest['services'][$serviceName]['pagination'], "$serviceName-pagination", $manifest['services'][$serviceName]['patches']['pagination'] ?? []);
279279
$waiterArray = isset($manifest['services'][$serviceName]['waiter']) ? $this->loadFile($manifest['services'][$serviceName]['waiter'], "$serviceName-waiter", $manifest['services'][$serviceName]['patches']['waiter'] ?? []) : ['waiters' => []];
280280
$exampleArray = isset($manifest['services'][$serviceName]['example']) ? $this->loadFile($manifest['services'][$serviceName]['example'], "$serviceName-example", $manifest['services'][$serviceName]['patches']['example'] ?? []) : ['examples' => []];
281+
$customErrorFactory = $manifest['services'][$serviceName]['error-factory'] ?? null;
281282

282283
$operationNames = $this->getOperationNames($input->getArgument('operation'), $input->getOption('all'), $io, $definitionArray, $waiterArray, $manifest['services'][$serviceName]);
283284
if (\is_int($operationNames)) {
@@ -288,7 +289,7 @@ private function generateService(SymfonyStyle $io, InputInterface $input, array
288289
$definition = new ServiceDefinition($serviceName, $endpoints, $definitionArray, $documentationArray, $paginationArray, $waiterArray, $exampleArray, $manifest['services'][$serviceName]['hooks'] ?? [], $manifest['services'][$serviceName]['api-reference'] ?? null);
289290
$serviceGenerator = $this->generator->service($namespace = $manifest['services'][$serviceName]['namespace'] ?? sprintf('AsyncAws\\%s', $serviceName), $managedOperations);
290291

291-
$clientClass = $serviceGenerator->client()->generate($definition);
292+
$clientClass = $serviceGenerator->client()->generate($definition, $customErrorFactory);
292293

293294
foreach ($operationNames as $operationName) {
294295
if (null !== $operation = $definition->getOperation($operationName)) {

src/CodeGenerator/src/Generator/ClientGenerator.php

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public function __construct(ClassRegistry $classRegistry, NamespaceRegistry $nam
5151
/**
5252
* Update the API client with a constants function call.
5353
*/
54-
public function generate(ServiceDefinition $definition): ClassName
54+
public function generate(ServiceDefinition $definition, ?string $customErrorFactory): ClassName
5555
{
5656
$className = $this->namespaceRegistry->getClient($definition);
5757
if (0 !== strpos($className->getFqdn(), 'AsyncAws\Core\\')) {
@@ -259,22 +259,26 @@ public function getVersion() {
259259
->setNullable(true)
260260
;
261261

262-
switch ($definition->getProtocol()) {
263-
case 'query':
264-
case 'rest-xml':
265-
$errorFactory = XmlAwsErrorFactory::class;
266-
267-
break;
268-
case 'rest-json':
269-
$errorFactory = JsonRestAwsErrorFactory::class;
270-
271-
break;
272-
case 'json':
273-
$errorFactory = JsonRpcAwsErrorFactory::class;
274-
275-
break;
276-
default:
277-
throw new \LogicException(sprintf('Parser for "%s" is not implemented yet', $definition->getProtocol()));
262+
if (null !== $customErrorFactory) {
263+
$errorFactory = $customErrorFactory;
264+
} else {
265+
switch ($definition->getProtocol()) {
266+
case 'query':
267+
case 'rest-xml':
268+
$errorFactory = XmlAwsErrorFactory::class;
269+
270+
break;
271+
case 'rest-json':
272+
$errorFactory = JsonRestAwsErrorFactory::class;
273+
274+
break;
275+
case 'json':
276+
$errorFactory = JsonRpcAwsErrorFactory::class;
277+
278+
break;
279+
default:
280+
throw new \LogicException(sprintf('Parser for "%s" is not implemented yet', $definition->getProtocol()));
281+
}
278282
}
279283

280284
$classBuilder->addUse(AwsErrorFactoryInterface::class);

0 commit comments

Comments
 (0)