From 69c3af185dfd4dc48a99a427a1edbeb950c38b83 Mon Sep 17 00:00:00 2001 From: Cees-Jan Kiewiet Date: Mon, 27 Feb 2023 17:59:14 +0100 Subject: [PATCH] Look up nested schemas in webhooks --- src/Gatherer/WebHookHydrator.php | 21 +++++++++++++++++++-- src/Generator.php | 8 ++++---- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/src/Gatherer/WebHookHydrator.php b/src/Gatherer/WebHookHydrator.php index 392444d..67149aa 100644 --- a/src/Gatherer/WebHookHydrator.php +++ b/src/Gatherer/WebHookHydrator.php @@ -21,8 +21,10 @@ public static function gather( $schemaClasses = []; foreach ($webHooks as $webHook) { - foreach ($webHook->schema as $schema) { - $schemaClasses[] = $schema; + foreach ($webHook->schema as $webHookSchema) { + foreach (self::listSchemas($webHookSchema) as $schema) { + $schemaClasses[] = $schema; + } } } @@ -31,4 +33,19 @@ public static function gather( ...$schemaClasses, ); } + + /** + * @return iterable<\ApiClients\Tools\OpenApiClientGenerator\Representation\Schema> + */ + private static function listSchemas(\ApiClients\Tools\OpenApiClientGenerator\Representation\Schema $schema): iterable + { + foreach ($schema->properties as $property) { + foreach ($property->type as $propertyType) { + if ($propertyType->payload instanceof \ApiClients\Tools\OpenApiClientGenerator\Representation\Schema) { + yield $propertyType->payload; + yield from self::listSchemas($propertyType->payload); + } + } + } + } } diff --git a/src/Generator.php b/src/Generator.php index 3e36bac..1bd9bce 100644 --- a/src/Generator.php +++ b/src/Generator.php @@ -41,28 +41,28 @@ public function generate(string $namespace, string $destinationPath) new Node\Stmt\Use_([ new Node\Stmt\UseUse( new Node\Name( - $namespace . 'Hydrator', + ltrim($namespace, '\\') . 'Hydrator', ) ) ]), new Node\Stmt\Use_([ new Node\Stmt\UseUse( new Node\Name( - $namespace . 'Operation', + ltrim($namespace, '\\') . 'Operation', ) ) ]), new Node\Stmt\Use_([ new Node\Stmt\UseUse( new Node\Name( - $namespace . 'Schema', + ltrim($namespace, '\\') . 'Schema', ) ) ]), new Node\Stmt\Use_([ new Node\Stmt\UseUse( new Node\Name( - $namespace . 'WebHook', + ltrim($namespace, '\\') . 'WebHook', ) ) ]),