| 
<?php
 declare(strict_types=1);
 
 /**
 * phpcs:disable Generic.Files.LineLength
 *
 * @var \Picamator\TransferObject\Generated\TemplateTransfer $templateTransfer
 * @var \Picamator\TransferObject\TransferGenerator\Generator\Render\TemplateHelperInterface $helper
 */
 
 echo <<<TEMPLATE
 <?php
 
 declare(strict_types=1);
 
 namespace $templateTransfer->classNamespace;
 
 {$helper->renderKeyValue($templateTransfer->imports, 'use :value;')}
 
 /**
 * Specification:
 * - Class is automatically generated based on a definition file.
 * - To modify it, please update the corresponding definition file and run the generator again.
 *
 * Note: Do not manually edit this file, as changes will be overwritten.
 *
 * @see $templateTransfer->definitionPath Definition file path.
 */
 final class $templateTransfer->className extends AbstractTransfer
 {
 protected const int META_DATA_SIZE = {$templateTransfer->properties->count()};
 
 protected const array META_DATA = [
 {$helper->renderKeyValue($templateTransfer->metaConstants, '        self:::key => self:::key_DATA_NAME,')}
 ];
 
 TEMPLATE;
 
 $i = 0;
 foreach ($templateTransfer->metaConstants as $constant => $property) {
 echo <<<TEMPLATE
 
 // $property{$helper->getAttribute($property)}
 public const string $constant = '$property';
 protected const string {$constant}_DATA_NAME = '$constant';
 protected const int {$constant}_DATA_INDEX = $i;
 {$helper->getDockBlock($property)}
 public{$helper->getProtected($property)} {$helper->getNullable($property)}{$templateTransfer->properties[$property]} \$$property {
 get => \$this->getData(self::{$constant}_DATA_INDEX);
 set => \$this->setData(self::{$constant}_DATA_INDEX, \$value);
 }
 
 TEMPLATE;
 $i++;
 } ?>
 }
 
 |