diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 6991001f3..8a1fb06ed 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -115,7 +115,7 @@ sdk-generator/blob/master/example.php: Run the following command (make sure you have an updated docker version on your machine): ```bash -docker run --rm -v $(pwd):/app -w /app php:8.1-cli php example.php +docker run --rm -v $(pwd):/app -w /app php:8.3-cli php example.php ``` >Note: You can just add the new language next to the other languages in the `example.php` file. You don't need to rewrite the file completely. @@ -252,7 +252,7 @@ Also in `.travis.yml` add new env `SDK=[Language]` so that travis will run a tes Finally, you can run tests using: ```sh -docker run --rm -v $(pwd):$(pwd):rw -w $(pwd) -v /var/run/docker.sock:/var/run/docker.sock php:8.1-cli-alpine sh -c "apk add docker-cli && vendor/bin/phpunit" +docker run --rm -v $(pwd):$(pwd):rw -w $(pwd) -v /var/run/docker.sock:/var/run/docker.sock php:8.3-cli-alpine sh -c "apk add docker-cli && vendor/bin/phpunit" ``` ## SDK Generator Interface diff --git a/src/SDK/Language/Node.php b/src/SDK/Language/Node.php index f7e819150..3c5449573 100644 --- a/src/SDK/Language/Node.php +++ b/src/SDK/Language/Node.php @@ -29,6 +29,19 @@ public function getTypeName(array $parameter, array $method = []): string case self::TYPE_NUMBER: return 'number'; case self::TYPE_ARRAY: + if (!empty($parameter['array']['x-anyOf'] ?? [])) { + $unionTypes = []; + foreach ($parameter['array']['x-anyOf'] as $refType) { + if (isset($refType['$ref'])) { + $refParts = explode('/', $refType['$ref']); + $modelName = end($refParts); + $unionTypes[] = 'Models.' . $this->toPascalCase($modelName); + } + } + if (!empty($unionTypes)) { + return '(' . implode(' | ', $unionTypes) . ')[]'; + } + } if (!empty(($parameter['array'] ?? [])['type']) && !\is_array($parameter['array']['type'])) { return $this->getTypeName($parameter['array']) . '[]'; } diff --git a/src/SDK/Language/Web.php b/src/SDK/Language/Web.php index 94b48343d..54731de93 100644 --- a/src/SDK/Language/Web.php +++ b/src/SDK/Language/Web.php @@ -194,6 +194,19 @@ public function getTypeName(array $parameter, array $method = []): string case self::TYPE_NUMBER: return 'number'; case self::TYPE_ARRAY: + if (!empty($parameter['array']['x-anyOf'] ?? [])) { + $unionTypes = []; + foreach ($parameter['array']['x-anyOf'] as $refType) { + if (isset($refType['$ref'])) { + $refParts = explode('/', $refType['$ref']); + $modelName = end($refParts); + $unionTypes[] = 'Models.' . $this->toPascalCase($modelName); + } + } + if (!empty($unionTypes)) { + return '(' . implode(' | ', $unionTypes) . ')[]'; + } + } if (!empty(($parameter['array'] ?? [])['type']) && !\is_array($parameter['array']['type'])) { return $this->getTypeName($parameter['array']) . '[]'; }