coupon-admin/vendor/zircote/swagger-php/src/Annotations/Parameter.php

264 lines
8.0 KiB
PHP

<?php declare(strict_types=1);
/**
* @license Apache 2.0
*/
namespace OpenApi\Annotations;
use OpenApi\Generator;
use OpenApi\Logger;
/**
* @Annotation
* [A "Parameter Object": https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#parameter-object
* Describes a single operation parameter.
* A unique parameter is defined by a combination of a name and location.
*/
class Parameter extends AbstractAnnotation
{
/**
* $ref See https://swagger.io/docs/specification/using-ref/.
*
* @var string
*/
public $ref = Generator::UNDEFINED;
/**
* The key into Components->parameters or PathItem->parameters array.
*
* @var string
*/
public $parameter = Generator::UNDEFINED;
/**
* The name of the parameter.
* Parameter names are case sensitive.
* If in is "path", the name field must correspond to the associated path segment from the path field in the Paths Object.
* If in is "header" and the name field is "Accept", "Content-Type" or "Authorization", the parameter definition shall be ignored.
* For all other cases, the name corresponds to the parameter name used by the in property.
*
* @var string
*/
public $name = Generator::UNDEFINED;
/**
* The location of the parameter.
* Possible values are "query", "header", "path" or "cookie".
*
* @var string
*/
public $in = Generator::UNDEFINED;
/**
* A brief description of the parameter.
* This could contain examples of use.
* CommonMark syntax may be used for rich text representation.
*
* @var string
*/
public $description = Generator::UNDEFINED;
/**
* Determines whether this parameter is mandatory.
* If the parameter location is "path", this property is required and its value must be true.
* Otherwise, the property may be included and its default value is false.
*
* @var bool
*/
public $required = Generator::UNDEFINED;
/**
* Specifies that a parameter is deprecated and should be transitioned out of usage.
*
* @var bool
*/
public $deprecated = Generator::UNDEFINED;
/**
* Sets the ability to pass empty-valued parameters.
* This is valid only for query parameters and allows sending a parameter with an empty value.
* Default value is false. If style is used, and if behavior is n/a (cannot be serialized), the value of allowEmptyValue shall be ignored.
*
* @var bool
*/
public $allowEmptyValue = Generator::UNDEFINED;
/**
* Describes how the parameter value will be serialized depending on the type of the parameter value.
* Default values (based on value of in): for query - form; for path - simple; for header - simple; for cookie - form.
*
* @var string
*/
public $style = Generator::UNDEFINED;
/**
* When this is true, parameter values of type array or object generate separate parameters for each value of the array or key-value pair of the map.
* For other types of parameters this property has no effect.
* When style is form, the default value is true.
* For all other styles, the default value is false.
*
* @var bool
*/
public $explode = Generator::UNDEFINED;
/**
* Determines whether the parameter value should allow reserved characters, as defined by RFC3986 :/?#[]@!$&'()*+,;= to be included without percent-encoding.
* This property only applies to parameters with an in value of query.
* The default value is false.
*
* @var bool
*/
public $allowReserved = Generator::UNDEFINED;
/**
* The schema defining the type used for the parameter.
*
* @var Schema
*/
public $schema = Generator::UNDEFINED;
/**
* Example of the media type.
* The example should match the specified schema and encoding properties if present.
* The example object is mutually exclusive of the examples object.
* Furthermore, if referencing a schema which contains an example, the example value shall override the example provided by the schema.
* To represent examples of media types that cannot naturally be represented in JSON or YAML, a string value can contain the example with escaping where necessary.
*/
public $example = Generator::UNDEFINED;
/**
* Examples of the media type.
* Each example should contain a value in the correct format as specified in the parameter encoding.
* The examples object is mutually exclusive of the example object.
* Furthermore, if referencing a schema which contains an example, the examples value shall override the example provided by the schema.
*
* @var array
*/
public $examples = Generator::UNDEFINED;
/**
* A map containing the representations for the parameter.
* The key is the media type and the value describes it.
* The map must only contain one entry.
*
* @var MediaType[]
*/
public $content = Generator::UNDEFINED;
/**
* Path-style parameters defined by https://tools.ietf.org/html/rfc6570#section-3.2.7.
*/
public $matrix = Generator::UNDEFINED;
/**
* Label style parameters defined by https://tools.ietf.org/html/rfc6570#section-3.2.5.
*/
public $label = Generator::UNDEFINED;
/**
* Form style parameters defined by https://tools.ietf.org/html/rfc6570#section-3.2.8
* This option replaces collectionFormat with a csv (when explode is false) or multi (when explode is true) value from OpenAPI 2.0.
*/
public $form = Generator::UNDEFINED;
/**
* Simple style parameters defined by https://tools.ietf.org/html/rfc6570#section-3.2.2
* This option replaces collectionFormat with a csv value from OpenAPI 2.0.
*
* @var array
*/
public $simple = Generator::UNDEFINED;
/**
* Space separated array values.
* This option replaces collectionFormat equal to ssv from OpenAPI 2.0.
*
* @var array
*/
public $spaceDelimited = Generator::UNDEFINED;
/**
* Pipe separated array values.
* This option replaces collectionFormat equal to pipes from OpenAPI 2.0.
*
* @var array
*/
public $pipeDelimited = Generator::UNDEFINED;
/**
* Provides a simple way of rendering nested objects using form parameters.
*/
public $deepObject = Generator::UNDEFINED;
/**
* @inheritdoc
*/
public static $_required = ['name', 'in'];
/**
* @inheritdoc
*/
public static $_types = [
'name' => 'string',
'in' => ['query', 'header', 'path', 'cookie'],
'description' => 'string',
'style' => ['matrix', 'label', 'form', 'simple', 'spaceDelimited', 'pipeDelimited', 'deepObject'],
'required' => 'boolean',
];
/**
* @inheritdoc
*/
public static $_nested = [
Schema::class => 'schema',
Examples::class => ['examples', 'example'],
];
/**
* @inheritdoc
*/
public static $_parents = [
Components::class,
PathItem::class,
Operation::class,
Get::class,
Post::class,
Put::class,
Delete::class,
Patch::class,
Head::class,
Options::class,
Trace::class,
];
/**
* @inheritdoc
*/
public function validate(array $parents = [], array $skip = [], string $ref = ''): bool
{
if (in_array($this, $skip, true)) {
return true;
}
$valid = parent::validate($parents, $skip, $ref);
if ($this->ref === Generator::UNDEFINED) {
if ($this->in === 'body') {
if ($this->schema === Generator::UNDEFINED) {
Logger::notice('Field "schema" is required when ' . $this->identity() . ' is in "' . $this->in . '" in ' . $this->_context);
$valid = false;
}
}
}
return $valid;
}
/**
* @inheritdoc
*/
public function identity(): string
{
return parent::_identity(['name', 'in']);
}
}