Skip to content

Commit a45d158

Browse files
committed
[PHP] - Add range HTTP code support
1 parent c6e2a5f commit a45d158

55 files changed

Lines changed: 7686 additions & 6473 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

modules/openapi-generator/src/main/resources/php-nextgen/api.mustache

Lines changed: 69 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ use GuzzleHttp\Psr7\MultipartStream;
2626
use GuzzleHttp\Psr7\Request;
2727
use GuzzleHttp\RequestOptions;
2828
use GuzzleHttp\Promise\PromiseInterface;
29+
use Psr\Http\Message\ResponseInterface;
2930
use {{invokerPackage}}\ApiException;
3031
use {{invokerPackage}}\Configuration;
3132
use {{invokerPackage}}\HeaderSelector;
@@ -289,42 +290,26 @@ use {{invokerPackage}}\ObjectSerializer;
289290
{{#returnType}}
290291
{{#responses}}
291292
{{#-first}}
292-
293293
switch($statusCode) {
294294
{{/-first}}
295295
{{#dataType}}
296296
{{^isRange}}{{^isWildcard}}case {{code}}:{{/isWildcard}}{{#isWildcard}}default:{{/isWildcard}}
297-
if (in_array('{{{dataType}}}', ['\SplFileObject', '\Psr\Http\Message\StreamInterface'])) {
298-
$content = $response->getBody(); //stream goes to serializer
299-
} else {
300-
$content = (string) $response->getBody();
301-
if ('{{{dataType}}}' !== 'string') {
302-
try {
303-
$content = json_decode($content, false, 512, JSON_THROW_ON_ERROR);
304-
} catch (\JsonException $exception) {
305-
throw new ApiException(
306-
sprintf(
307-
'Error JSON decoding server response (%s)',
308-
$request->getUri()
309-
),
310-
$statusCode,
311-
$response->getHeaders(),
312-
$content
313-
);
314-
}
315-
}
316-
}
317-
318-
return [
319-
ObjectSerializer::deserialize($content, '{{{dataType}}}', []),
320-
$response->getStatusCode(),
321-
$response->getHeaders()
322-
];{{/isRange}}
297+
return $this->handleResponseWithDataType(
298+
'{{{dataType}}}',
299+
$response,
300+
);{{/isRange}}
323301
{{/dataType}}
324302
{{#-last}}
325303
}
326304
{{/-last}}
327305
{{/responses}}
306+
{{#responses}}{{#dataType}}{{#isRange}}{{^isWildcard}}
307+
if ($this->responseWithinRangeCode('{{code}}', $statusCode)) {
308+
return $this->handleResponseWithDataType(
309+
'{{{dataType}}}',
310+
$response,
311+
);
312+
}{{/isWildcard}}{{/isRange}}{{/dataType}}{{/responses}}
328313

329314
if ($statusCode < 200 || $statusCode > 299) {
330315
throw new ApiException(
@@ -339,39 +324,15 @@ use {{invokerPackage}}\ObjectSerializer;
339324
);
340325
}
341326

342-
$returnType = '{{{returnType}}}';
343-
if (in_array($returnType, ['\SplFileObject', '\Psr\Http\Message\StreamInterface'])) {
344-
$content = $response->getBody(); //stream goes to serializer
345-
} else {
346-
$content = (string) $response->getBody();
347-
if ($returnType !== 'string') {
348-
try {
349-
$content = json_decode($content, false, 512, JSON_THROW_ON_ERROR);
350-
} catch (\JsonException $exception) {
351-
throw new ApiException(
352-
sprintf(
353-
'Error JSON decoding server response (%s)',
354-
$request->getUri()
355-
),
356-
$statusCode,
357-
$response->getHeaders(),
358-
$content
359-
);
360-
}
361-
}
362-
}
363-
364-
return [
365-
ObjectSerializer::deserialize($content, $returnType, []),
366-
$response->getStatusCode(),
367-
$response->getHeaders()
368-
];
327+
return $this->handleResponseWithDataType(
328+
'{{{returnType}}}',
329+
$response,
330+
);
369331
{{/returnType}}
370332
{{^returnType}}
371333

372334
return [null, $statusCode, $response->getHeaders()];
373335
{{/returnType}}
374-
375336
} catch (ApiException $e) {
376337
switch ($e->getCode()) {
377338
{{#responses}}
@@ -383,10 +344,20 @@ use {{invokerPackage}}\ObjectSerializer;
383344
$e->getResponseHeaders()
384345
);
385346
$e->setResponseObject($data);
386-
break;{{/isRange}}
347+
throw $e;{{/isRange}}
387348
{{/dataType}}
388349
{{/responses}}
389350
}
351+
{{#responses}}{{#dataType}}{{#isRange}}{{^isWildcard}}
352+
if ($this->responseWithinRangeCode('{{code}}', $e->getCode())) {
353+
$data = ObjectSerializer::deserialize(
354+
$e->getResponseBody(),
355+
'{{{dataType}}}',
356+
$e->getResponseHeaders()
357+
);
358+
$e->setResponseObject($data);
359+
throw $e;
360+
}{{/isWildcard}}{{/isRange}}{{/dataType}}{{/responses}}
390361
throw $e;
391362
}
392363
}
@@ -938,5 +909,47 @@ use {{invokerPackage}}\ObjectSerializer;
938909

939910
return $options;
940911
}
912+
913+
private function handleResponseWithDataType(
914+
string $dataType,
915+
ResponseInterface $response,
916+
): array {
917+
if (in_array($dataType, ['\SplFileObject', '\Psr\Http\Message\StreamInterface'])) {
918+
$content = $response->getBody(); //stream goes to serializer
919+
} else {
920+
$content = (string) $response->getBody();
921+
if ($dataType !== 'string') {
922+
try {
923+
$content = json_decode($content, false, 512, JSON_THROW_ON_ERROR);
924+
} catch (\JsonException $exception) {
925+
throw new ApiException(
926+
sprintf(
927+
'Error JSON decoding server response (%s)',
928+
$request->getUri()
929+
),
930+
$response->getStatusCode(),
931+
$response->getHeaders(),
932+
$content
933+
);
934+
}
935+
}
936+
}
937+
938+
return [
939+
ObjectSerializer::deserialize($content, $dataType, []),
940+
$response->getStatusCode(),
941+
$response->getHeaders()
942+
];
943+
}
944+
945+
private function responseWithinRangeCode(
946+
string $rangeCode,
947+
int $statusCode,
948+
): bool {
949+
$left = (int) ($rangeCode[0].'00');
950+
$right = (int) ($rangeCode[0].'99');
951+
952+
return $statusCode >= $left && $statusCode <= $right;
953+
}
941954
}
942955
{{/operations}}

modules/openapi-generator/src/main/resources/php/api.mustache

Lines changed: 70 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ use GuzzleHttp\Exception\RequestException;
2525
use GuzzleHttp\Psr7\MultipartStream;
2626
use GuzzleHttp\Psr7\Request;
2727
use GuzzleHttp\RequestOptions;
28+
use Psr\Http\Message\ResponseInterface;
2829
use {{invokerPackage}}\ApiException;
2930
use {{invokerPackage}}\Configuration;
3031
use {{invokerPackage}}\HeaderSelector;
@@ -262,38 +263,23 @@ use {{invokerPackage}}\ObjectSerializer;
262263
{{/-first}}
263264
{{#dataType}}
264265
{{^isRange}}{{^isWildcard}}case {{code}}:{{/isWildcard}}{{#isWildcard}}default:{{/isWildcard}}
265-
if ('{{{dataType}}}' === '\SplFileObject') {
266-
$content = $response->getBody(); //stream goes to serializer
267-
} else {
268-
$content = (string) $response->getBody();
269-
if ('{{{dataType}}}' !== 'string') {
270-
try {
271-
$content = json_decode($content, false, 512, JSON_THROW_ON_ERROR);
272-
} catch (\JsonException $exception) {
273-
throw new ApiException(
274-
sprintf(
275-
'Error JSON decoding server response (%s)',
276-
$request->getUri()
277-
),
278-
$statusCode,
279-
$response->getHeaders(),
280-
$content
281-
);
282-
}
283-
}
284-
}
285-
286-
return [
287-
ObjectSerializer::deserialize($content, '{{{dataType}}}', []),
288-
$response->getStatusCode(),
289-
$response->getHeaders()
290-
];{{/isRange}}
266+
return $this->handleResponseWithDataType(
267+
'{{{dataType}}}',
268+
$response,
269+
);{{/isRange}}
291270
{{/dataType}}
292271
{{#-last}}
293272
}
294273
{{/-last}}
295274
{{/responses}}
296275

276+
{{#responses}}{{#dataType}}{{#isRange}}{{^isWildcard}}if ($this->responseWithinRangeCode('{{code}}', $statusCode)) {
277+
return $this->handleResponseWithDataType(
278+
'{{{dataType}}}',
279+
$response,
280+
);
281+
}{{/isWildcard}}{{/isRange}}{{/dataType}}{{/responses}}
282+
297283
if ($statusCode < 200 || $statusCode > 299) {
298284
throw new ApiException(
299285
sprintf(
@@ -307,39 +293,15 @@ use {{invokerPackage}}\ObjectSerializer;
307293
);
308294
}
309295

310-
$returnType = '{{{returnType}}}';
311-
if ($returnType === '\SplFileObject') {
312-
$content = $response->getBody(); //stream goes to serializer
313-
} else {
314-
$content = (string) $response->getBody();
315-
if ($returnType !== 'string') {
316-
try {
317-
$content = json_decode($content, false, 512, JSON_THROW_ON_ERROR);
318-
} catch (\JsonException $exception) {
319-
throw new ApiException(
320-
sprintf(
321-
'Error JSON decoding server response (%s)',
322-
$request->getUri()
323-
),
324-
$statusCode,
325-
$response->getHeaders(),
326-
$content
327-
);
328-
}
329-
}
330-
}
331-
332-
return [
333-
ObjectSerializer::deserialize($content, $returnType, []),
334-
$response->getStatusCode(),
335-
$response->getHeaders()
336-
];
296+
return $this->handleResponseWithDataType(
297+
'{{{returnType}}}',
298+
$response,
299+
);
337300
{{/returnType}}
338301
{{^returnType}}
339302

340303
return [null, $statusCode, $response->getHeaders()];
341304
{{/returnType}}
342-
343305
} catch (ApiException $e) {
344306
switch ($e->getCode()) {
345307
{{#responses}}
@@ -351,10 +313,21 @@ use {{invokerPackage}}\ObjectSerializer;
351313
$e->getResponseHeaders()
352314
);
353315
$e->setResponseObject($data);
354-
break;{{/isRange}}
316+
throw $e;{{/isRange}}
355317
{{/dataType}}
356318
{{/responses}}
357319
}
320+
{{#responses}}{{#dataType}}{{#isRange}}{{^isWildcard}}
321+
if ($this->responseWithinRangeCode('{{code}}', $e->getCode())) {
322+
$data = ObjectSerializer::deserialize(
323+
$e->getResponseBody(),
324+
'{{{dataType}}}',
325+
$e->getResponseHeaders()
326+
);
327+
$e->setResponseObject($data);
328+
throw $e;
329+
}{{/isWildcard}}{{/isRange}}{{/dataType}}{{/responses}}
330+
358331
throw $e;
359332
}
360333
}
@@ -859,5 +832,47 @@ use {{invokerPackage}}\ObjectSerializer;
859832

860833
return $options;
861834
}
835+
836+
private function handleResponseWithDataType(
837+
string $dataType,
838+
ResponseInterface $response
839+
): array {
840+
if ($dataType === '\SplFileObject') {
841+
$content = $response->getBody(); //stream goes to serializer
842+
} else {
843+
$content = (string) $response->getBody();
844+
if ($dataType !== 'string') {
845+
try {
846+
$content = json_decode($content, false, 512, JSON_THROW_ON_ERROR);
847+
} catch (\JsonException $exception) {
848+
throw new ApiException(
849+
sprintf(
850+
'Error JSON decoding server response (%s)',
851+
$request->getUri()
852+
),
853+
$response->getStatusCode(),
854+
$response->getHeaders(),
855+
$content
856+
);
857+
}
858+
}
859+
}
860+
861+
return [
862+
ObjectSerializer::deserialize($content, $dataType, []),
863+
$response->getStatusCode(),
864+
$response->getHeaders()
865+
];
866+
}
867+
868+
private function responseWithinRangeCode(
869+
string $rangeCode,
870+
int $statusCode
871+
): bool {
872+
$left = (int) ($rangeCode[0].'00');
873+
$right = (int) ($rangeCode[0].'99');
874+
875+
return $statusCode >= $left && $statusCode <= $right;
876+
}
862877
}
863878
{{/operations}}

0 commit comments

Comments
 (0)