forked from loafle/openapi-generator-original
Merge remote-tracking branch 'origin' into 7.0.x
This commit is contained in:
@@ -157,6 +157,49 @@ class ObjectSerializer
|
||||
return rawurlencode(self::toString($value));
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if a value is empty, based on its OpenAPI type.
|
||||
*
|
||||
* @param mixed $value
|
||||
* @param string $openApiType
|
||||
*
|
||||
* @return bool true if $value is empty
|
||||
*/
|
||||
private static function isEmptyValue($value, string $openApiType): bool
|
||||
{
|
||||
# If empty() returns false, it is not empty regardless of its type.
|
||||
if (!empty($value)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
# Null is always empty, as we cannot send a real "null" value in a query parameter.
|
||||
if ($value === null) {
|
||||
return true;
|
||||
}
|
||||
|
||||
switch ($openApiType) {
|
||||
# For numeric values, false and '' are considered empty.
|
||||
# This comparison is safe for floating point values, since the previous call to empty() will
|
||||
# filter out values that don't match 0.
|
||||
case 'int':
|
||||
case 'integer':
|
||||
return $value !== 0;
|
||||
|
||||
case 'number':
|
||||
case 'float':
|
||||
return $value !== 0 && $value !== 0.0;
|
||||
|
||||
# For boolean values, '' is considered empty
|
||||
case 'bool':
|
||||
case 'boolean':
|
||||
return !in_array($value, [false, 0], true);
|
||||
|
||||
# For all the other types, any value at this point can be considered empty.
|
||||
default:
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Take query parameter properties and turn it into an array suitable for
|
||||
* native http_build_query or GuzzleHttp\Psr7\Query::build.
|
||||
@@ -178,10 +221,12 @@ class ObjectSerializer
|
||||
bool $explode = true,
|
||||
bool $required = true
|
||||
): array {
|
||||
if (
|
||||
empty($value)
|
||||
&& ($value !== false || $openApiType !== 'boolean') // if $value === false and $openApiType ==='boolean' it isn't empty
|
||||
) {
|
||||
|
||||
# Check if we should omit this parameter from the query. This should only happen when:
|
||||
# - Parameter is NOT required; AND
|
||||
# - its value is set to a value that is equivalent to "empty", depending on its OpenAPI type. For
|
||||
# example, 0 as "int" or "boolean" is NOT an empty value.
|
||||
if (self::isEmptyValue($value, $openApiType)) {
|
||||
if ($required) {
|
||||
return ["{$paramName}" => ''];
|
||||
} else {
|
||||
@@ -400,7 +445,7 @@ class ObjectSerializer
|
||||
}
|
||||
|
||||
if ($class === '\DateTime') {
|
||||
// Some API's return an invalid, empty string as a
|
||||
// Some APIs return an invalid, empty string as a
|
||||
// date-time property. DateTime::__construct() will return
|
||||
// the current time for empty input which is probably not
|
||||
// what is meant. The invalid empty string is probably to
|
||||
@@ -410,7 +455,7 @@ class ObjectSerializer
|
||||
try {
|
||||
return new \DateTime($data);
|
||||
} catch (\Exception $exception) {
|
||||
// Some API's return a date-time with too high nanosecond
|
||||
// Some APIs return a date-time with too high nanosecond
|
||||
// precision for php's DateTime to handle.
|
||||
// With provided regexp 6 digits of microseconds saved
|
||||
return new \DateTime(self::sanitizeTimestamp($data));
|
||||
|
||||
Reference in New Issue
Block a user