class {{classname}} {{#parentSchema}}extends {{{parent}}}{{/parentSchema}}{{^parentSchema}}implements ModelInterface, ArrayAccess, \JsonSerializable{{/parentSchema}} { public const DISCRIMINATOR = {{#discriminator}}'{{discriminatorName}}'{{/discriminator}}{{^discriminator}}null{{/discriminator}}; /** * The original name of the model. * * @var string */ protected static string $openAPIModelName = '{{name}}'; /** * Array of property to type mappings. Used for (de)serialization * * @var string[] */ protected static array $openAPITypes = [ {{#vars}}'{{name}}' => '{{{dataType}}}'{{^-last}}, {{/-last}}{{/vars}} ]; /** * Array of property to format mappings. Used for (de)serialization * * @var string[] * @phpstan-var array * @psalm-var array */ protected static array $openAPIFormats = [ {{#vars}}'{{name}}' => {{#dataFormat}}'{{{dataFormat}}}'{{/dataFormat}}{{^dataFormat}}null{{/dataFormat}}{{^-last}}, {{/-last}}{{/vars}} ]; /** * Array of property to type mappings. Used for (de)serialization * * @return array */ public static function openAPITypes() : array { return self::$openAPITypes{{#parentSchema}} + parent::openAPITypes(){{/parentSchema}}; } /** * Array of property to format mappings. Used for (de)serialization * * @return array */ public static function openAPIFormats() : array { return self::$openAPIFormats{{#parentSchema}} + parent::openAPIFormats(){{/parentSchema}}; } /** * Array of attributes where the key is the local name, * and the value is the original name * * @var string[] */ protected static array $attributeMap = [ {{#vars}}'{{name}}' => '{{baseName}}'{{^-last}}, {{/-last}}{{/vars}} ]; /** * Array of attributes to setter functions (for deserialization of responses) * * @var string[] */ protected static array $setters = [ {{#vars}}'{{name}}' => '{{setter}}'{{^-last}}, {{/-last}}{{/vars}} ]; /** * Array of attributes to getter functions (for serialization of requests) * * @var string[] */ protected static array $getters = [ {{#vars}}'{{name}}' => '{{getter}}'{{^-last}}, {{/-last}}{{/vars}} ]; /** * Array of attributes where the key is the local name, * and the value is the original name * * @return array */ public static function attributeMap() : array { return {{#parentSchema}}parent::attributeMap() + {{/parentSchema}}self::$attributeMap; } /** * Array of attributes to setter functions (for deserialization of responses) * * @return array */ public static function setters() : array { return {{#parentSchema}}parent::setters() + {{/parentSchema}}self::$setters; } /** * Array of attributes to getter functions (for serialization of requests) * * @return array */ public static function getters() : array { return {{#parentSchema}}parent::getters() + {{/parentSchema}}self::$getters; } /** * The original name of the model. * * @return string */ public function getModelName() : string { return self::$openAPIModelName; } {{#vars}} {{#isEnum}} {{#allowableValues}} {{#enumVars}} const {{enumName}}_{{{name}}} = {{{value}}}; {{/enumVars}} {{/allowableValues}} {{/isEnum}} {{/vars}} {{#vars}} {{#isEnum}} /** * Gets allowable values of the enum * * @return string[] */ public function {{getter}}AllowableValues() : array { return [ {{#allowableValues}}{{#enumVars}}self::{{enumName}}_{{{name}}},{{^-last}} {{/-last}}{{/enumVars}}{{/allowableValues}} ]; } {{/isEnum}} {{/vars}} {{^parentSchema}} /** * Associative array for storing property values * * @var mixed[] */ protected array $container = []; {{/parentSchema}} /** * Constructor * * @param mixed[] $data Associated array of property values * initializing the model */ public function __construct(array $data = null) { {{#parentSchema}} parent::__construct($data); {{/parentSchema}} {{#vars}} $this->container['{{name}}'] = $data['{{name}}'] ?? {{#defaultValue}}{{{defaultValue}}}{{/defaultValue}}{{^defaultValue}}null{{/defaultValue}}; {{/vars}} {{#discriminator}} // Initialize discriminator property with the model name. $this->container['{{discriminatorName}}'] = static::$openAPIModelName; {{/discriminator}} } /** * Validate all properties. * * @throws AssertionException */ public function validate() : void { {{#vars}} {{#required}} if ($this->container['{{name}}'] === null) { throw new AssertionException("'{{name}}' can't be null"); } {{/required}} {{#isEnum}} {{^isContainer}} $allowedValues = $this->{{getter}}AllowableValues(); if (!is_null($this->container['{{name}}']) && !in_array($this->container['{{name}}'], $allowedValues, true)) { throw new AssertionException( \sprintf( "invalid value '%s' for '{{name}}', must be one of '%s'", $this->container['{{name}}'], implode("', '", $allowedValues) ) ); } {{/isContainer}} {{/isEnum}} {{#hasValidation}} {{#maxLength}} if ({{^required}}!is_null($this->container['{{name}}']) && {{/required}}(mb_strlen($this->container['{{name}}']) > {{maxLength}})) { throw new AssertionException("invalid value for '{{name}}', the character length must be smaller than or equal to {{{maxLength}}}."); } {{/maxLength}} {{#minLength}} if ({{^required}}!is_null($this->container['{{name}}']) && {{/required}}(mb_strlen($this->container['{{name}}']) < {{minLength}})) { throw new AssertionException("invalid value for '{{name}}', the character length must be bigger than or equal to {{{minLength}}}."); } {{/minLength}} {{#maximum}} if ({{^required}}!is_null($this->container['{{name}}']) && {{/required}}($this->container['{{name}}'] >{{#exclusiveMaximum}}={{/exclusiveMaximum}} {{maximum}})) { throw new AssertionException("invalid value for '{{name}}', must be smaller than {{^exclusiveMaximum}}or equal to {{/exclusiveMaximum}}{{maximum}}."); } {{/maximum}} {{#minimum}} if ({{^required}}!is_null($this->container['{{name}}']) && {{/required}}($this->container['{{name}}'] <{{#exclusiveMinimum}}={{/exclusiveMinimum}} {{minimum}})) { throw new AssertionException("invalid value for '{{name}}', must be bigger than {{^exclusiveMinimum}}or equal to {{/exclusiveMinimum}}{{minimum}}."); } {{/minimum}} {{#pattern}} if ({{^required}}!is_null($this->container['{{name}}']) && {{/required}}!preg_match("{{{pattern}}}", $this->container['{{name}}'])) { throw new AssertionException("invalid value for '{{name}}', must be conform to the pattern {{{pattern}}}."); } {{/pattern}} {{#maxItems}} if ({{^required}}!is_null($this->container['{{name}}']) && {{/required}}(count($this->container['{{name}}']) > {{maxItems}})) { throw new AssertionException("invalid value for '{{name}}', number of items must be less than or equal to {{{maxItems}}}."); } {{/maxItems}} {{#minItems}} if ({{^required}}!is_null($this->container['{{name}}']) && {{/required}}(count($this->container['{{name}}']) < {{minItems}})) { throw new AssertionException("invalid value for '{{name}}', number of items must be greater than or equal to {{{minItems}}}."); } {{/minItems}} {{/hasValidation}} {{#isModel}} {{^required}} if ($this->container['{{name}}'] !== null) { {{/required}} $this->container['{{name}}']->validate(); {{^required}} } {{/required}} {{/isModel}} {{/vars}} } {{#vars}} /** * Gets {{name}} * * @return {{{dataType}}}{{^required}}|null{{/required}} */ public function {{getter}}() { return $this->container['{{name}}']; } /** * Sets {{name}} * * @param {{{dataType}}}{{^required}}|null{{/required}} ${{name}}{{#description}} {{{description}}}{{/description}}{{^description}} {{{name}}}{{/description}} * * @return self */ public function {{setter}}(${{name}}) : self { $this->container['{{name}}'] = ${{name}}; return $this; } {{/vars}} /** * Returns true if offset exists. False otherwise. * * @param integer $offset Offset * * @return boolean */ public function offsetExists($offset) : bool { return isset($this->container[$offset]); } /** * Gets offset. * * @param integer $offset Offset * * @return mixed|null */ public function offsetGet($offset) { return $this->container[$offset] ?? null; } /** * Sets value based on offset. * * @param int|null $offset Offset * @param mixed $value Value to be set * * @return void */ public function offsetSet($offset, $value) : void { if (is_null($offset)) { $this->container[] = $value; } else { $this->container[$offset] = $value; } } /** * Unsets offset. * * @param integer $offset Offset * * @return void */ public function offsetUnset($offset) : void { unset($this->container[$offset]); } /** * Serializes the object to a value that can be serialized natively by json_encode(). * @link https://www.php.net/manual/en/jsonserializable.jsonserialize.php * * @return mixed Returns data which can be serialized by json_encode(), which is a value * of any type other than a resource. */ public function jsonSerialize() : string { return \json_encode(ObjectSerializer::sanitizeForSerialization($this)); } /** * Gets the string presentation of the object * * @return string */ public function __toString() : string { return json_encode( ObjectSerializer::sanitizeForSerialization($this), JSON_PRETTY_PRINT ); } /** * Gets a header-safe presentation of the object * * @return string */ public function toHeaderValue() : string { return json_encode(ObjectSerializer::sanitizeForSerialization($this)); } }