<?php
/**
 * Printer
 *
 * PHP version 7.4
 *
 * @category Class
 * @package  SmartVolution
 * @author   OpenAPI Generator team
 * @link     https://openapi-generator.tech
 */

/**
 * SV Register Web-services
 *
 * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
 *
 * The version of the OpenAPI document: 4.15
 * Generated by: https://openapi-generator.tech
 * OpenAPI Generator version: 6.0.0
 */

/**
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

namespace SmartVolution\Model;

use \ArrayAccess;
use \SmartVolution\ObjectSerializer;

/**
 * Printer Class Doc Comment
 *
 * @category Class
 * @description 
 * @package  SmartVolution
 * @author   OpenAPI Generator team
 * @link     https://openapi-generator.tech
 * @implements \ArrayAccess<TKey, TValue>
 * @template TKey int|null
 * @template TValue mixed|null
 */
class Printer implements ModelInterface, ArrayAccess, \JsonSerializable
{
    public const DISCRIMINATOR = null;

    /**
      * The original name of the model.
      *
      * @var string
      */
    protected static $openAPIModelName = 'Printer';

    /**
      * Array of property to type mappings. Used for (de)serialization
      *
      * @var string[]
      */
    protected static $openAPITypes = [
        'id' => 'int',
        'name' => 'string',
        'defaultLineWidth' => 'int',
        'printFeedLength' => 'int',
        'field1Lbl' => 'string',
        'field1Info' => 'string',
        'field1Type' => 'string',
        'field1ReasonUsage' => 'int',
        'field1Default' => 'string',
        'field1Used' => 'bool',
        'field2Lbl' => 'string',
        'field2Info' => 'string',
        'field2Type' => 'string',
        'field2ReasonUsage' => 'int',
        'field2Default' => 'string',
        'field2Used' => 'bool',
        'field3Lbl' => 'string',
        'field3Info' => 'string',
        'field3Type' => 'string',
        'field3ReasonUsage' => 'int',
        'field3Default' => 'string',
        'field3Used' => 'bool',
        'field4Lbl' => 'string',
        'field4Info' => 'string',
        'field4Type' => 'string',
        'field4ReasonUsage' => 'int',
        'field4Default' => 'string',
        'field4Used' => 'bool',
        'field5Lbl' => 'string',
        'field5Info' => 'string',
        'field5Type' => 'string',
        'field5ReasonUsage' => 'int',
        'field5Default' => 'string',
        'field5Used' => 'bool',
        'onePerDev' => 'bool'
    ];

    /**
      * Array of property to format mappings. Used for (de)serialization
      *
      * @var string[]
      * @phpstan-var array<string, string|null>
      * @psalm-var array<string, string|null>
      */
    protected static $openAPIFormats = [
        'id' => 'int64',
        'name' => null,
        'defaultLineWidth' => 'int64',
        'printFeedLength' => 'int64',
        'field1Lbl' => null,
        'field1Info' => null,
        'field1Type' => null,
        'field1ReasonUsage' => 'int64',
        'field1Default' => null,
        'field1Used' => null,
        'field2Lbl' => null,
        'field2Info' => null,
        'field2Type' => null,
        'field2ReasonUsage' => 'int64',
        'field2Default' => null,
        'field2Used' => null,
        'field3Lbl' => null,
        'field3Info' => null,
        'field3Type' => null,
        'field3ReasonUsage' => 'int64',
        'field3Default' => null,
        'field3Used' => null,
        'field4Lbl' => null,
        'field4Info' => null,
        'field4Type' => null,
        'field4ReasonUsage' => 'int64',
        'field4Default' => null,
        'field4Used' => null,
        'field5Lbl' => null,
        'field5Info' => null,
        'field5Type' => null,
        'field5ReasonUsage' => 'int64',
        'field5Default' => null,
        'field5Used' => null,
        'onePerDev' => null
    ];

    /**
     * Array of property to type mappings. Used for (de)serialization
     *
     * @return array
     */
    public static function openAPITypes()
    {
        return self::$openAPITypes;
    }

    /**
     * Array of property to format mappings. Used for (de)serialization
     *
     * @return array
     */
    public static function openAPIFormats()
    {
        return self::$openAPIFormats;
    }

    /**
     * Array of attributes where the key is the local name,
     * and the value is the original name
     *
     * @var string[]
     */
    protected static $attributeMap = [
        'id' => 'id',
        'name' => 'name',
        'defaultLineWidth' => 'defaultLineWidth',
        'printFeedLength' => 'printFeedLength',
        'field1Lbl' => 'field1Lbl',
        'field1Info' => 'field1Info',
        'field1Type' => 'field1Type',
        'field1ReasonUsage' => 'field1ReasonUsage',
        'field1Default' => 'field1Default',
        'field1Used' => 'field1Used',
        'field2Lbl' => 'field2Lbl',
        'field2Info' => 'field2Info',
        'field2Type' => 'field2Type',
        'field2ReasonUsage' => 'field2ReasonUsage',
        'field2Default' => 'field2Default',
        'field2Used' => 'field2Used',
        'field3Lbl' => 'field3Lbl',
        'field3Info' => 'field3Info',
        'field3Type' => 'field3Type',
        'field3ReasonUsage' => 'field3ReasonUsage',
        'field3Default' => 'field3Default',
        'field3Used' => 'field3Used',
        'field4Lbl' => 'field4Lbl',
        'field4Info' => 'field4Info',
        'field4Type' => 'field4Type',
        'field4ReasonUsage' => 'field4ReasonUsage',
        'field4Default' => 'field4Default',
        'field4Used' => 'field4Used',
        'field5Lbl' => 'field5Lbl',
        'field5Info' => 'field5Info',
        'field5Type' => 'field5Type',
        'field5ReasonUsage' => 'field5ReasonUsage',
        'field5Default' => 'field5Default',
        'field5Used' => 'field5Used',
        'onePerDev' => 'onePerDev'
    ];

    /**
     * Array of attributes to setter functions (for deserialization of responses)
     *
     * @var string[]
     */
    protected static $setters = [
        'id' => 'setId',
        'name' => 'setName',
        'defaultLineWidth' => 'setDefaultLineWidth',
        'printFeedLength' => 'setPrintFeedLength',
        'field1Lbl' => 'setField1Lbl',
        'field1Info' => 'setField1Info',
        'field1Type' => 'setField1Type',
        'field1ReasonUsage' => 'setField1ReasonUsage',
        'field1Default' => 'setField1Default',
        'field1Used' => 'setField1Used',
        'field2Lbl' => 'setField2Lbl',
        'field2Info' => 'setField2Info',
        'field2Type' => 'setField2Type',
        'field2ReasonUsage' => 'setField2ReasonUsage',
        'field2Default' => 'setField2Default',
        'field2Used' => 'setField2Used',
        'field3Lbl' => 'setField3Lbl',
        'field3Info' => 'setField3Info',
        'field3Type' => 'setField3Type',
        'field3ReasonUsage' => 'setField3ReasonUsage',
        'field3Default' => 'setField3Default',
        'field3Used' => 'setField3Used',
        'field4Lbl' => 'setField4Lbl',
        'field4Info' => 'setField4Info',
        'field4Type' => 'setField4Type',
        'field4ReasonUsage' => 'setField4ReasonUsage',
        'field4Default' => 'setField4Default',
        'field4Used' => 'setField4Used',
        'field5Lbl' => 'setField5Lbl',
        'field5Info' => 'setField5Info',
        'field5Type' => 'setField5Type',
        'field5ReasonUsage' => 'setField5ReasonUsage',
        'field5Default' => 'setField5Default',
        'field5Used' => 'setField5Used',
        'onePerDev' => 'setOnePerDev'
    ];

    /**
     * Array of attributes to getter functions (for serialization of requests)
     *
     * @var string[]
     */
    protected static $getters = [
        'id' => 'getId',
        'name' => 'getName',
        'defaultLineWidth' => 'getDefaultLineWidth',
        'printFeedLength' => 'getPrintFeedLength',
        'field1Lbl' => 'getField1Lbl',
        'field1Info' => 'getField1Info',
        'field1Type' => 'getField1Type',
        'field1ReasonUsage' => 'getField1ReasonUsage',
        'field1Default' => 'getField1Default',
        'field1Used' => 'getField1Used',
        'field2Lbl' => 'getField2Lbl',
        'field2Info' => 'getField2Info',
        'field2Type' => 'getField2Type',
        'field2ReasonUsage' => 'getField2ReasonUsage',
        'field2Default' => 'getField2Default',
        'field2Used' => 'getField2Used',
        'field3Lbl' => 'getField3Lbl',
        'field3Info' => 'getField3Info',
        'field3Type' => 'getField3Type',
        'field3ReasonUsage' => 'getField3ReasonUsage',
        'field3Default' => 'getField3Default',
        'field3Used' => 'getField3Used',
        'field4Lbl' => 'getField4Lbl',
        'field4Info' => 'getField4Info',
        'field4Type' => 'getField4Type',
        'field4ReasonUsage' => 'getField4ReasonUsage',
        'field4Default' => 'getField4Default',
        'field4Used' => 'getField4Used',
        'field5Lbl' => 'getField5Lbl',
        'field5Info' => 'getField5Info',
        'field5Type' => 'getField5Type',
        'field5ReasonUsage' => 'getField5ReasonUsage',
        'field5Default' => 'getField5Default',
        'field5Used' => 'getField5Used',
        'onePerDev' => 'getOnePerDev'
    ];

    /**
     * Array of attributes where the key is the local name,
     * and the value is the original name
     *
     * @return array
     */
    public static function attributeMap()
    {
        return self::$attributeMap;
    }

    /**
     * Array of attributes to setter functions (for deserialization of responses)
     *
     * @return array
     */
    public static function setters()
    {
        return self::$setters;
    }

    /**
     * Array of attributes to getter functions (for serialization of requests)
     *
     * @return array
     */
    public static function getters()
    {
        return self::$getters;
    }

    /**
     * The original name of the model.
     *
     * @return string
     */
    public function getModelName()
    {
        return self::$openAPIModelName;
    }


    /**
     * Associative array for storing property values
     *
     * @var mixed[]
     */
    protected $container = [];

    /**
     * Constructor
     *
     * @param mixed[] $data Associated array of property values
     *                      initializing the model
     */
    public function __construct(array $data = null)
    {
        $this->container['id'] = $data['id'] ?? null;
        $this->container['name'] = $data['name'] ?? null;
        $this->container['defaultLineWidth'] = $data['defaultLineWidth'] ?? null;
        $this->container['printFeedLength'] = $data['printFeedLength'] ?? null;
        $this->container['field1Lbl'] = $data['field1Lbl'] ?? null;
        $this->container['field1Info'] = $data['field1Info'] ?? null;
        $this->container['field1Type'] = $data['field1Type'] ?? null;
        $this->container['field1ReasonUsage'] = $data['field1ReasonUsage'] ?? null;
        $this->container['field1Default'] = $data['field1Default'] ?? null;
        $this->container['field1Used'] = $data['field1Used'] ?? null;
        $this->container['field2Lbl'] = $data['field2Lbl'] ?? null;
        $this->container['field2Info'] = $data['field2Info'] ?? null;
        $this->container['field2Type'] = $data['field2Type'] ?? null;
        $this->container['field2ReasonUsage'] = $data['field2ReasonUsage'] ?? null;
        $this->container['field2Default'] = $data['field2Default'] ?? null;
        $this->container['field2Used'] = $data['field2Used'] ?? null;
        $this->container['field3Lbl'] = $data['field3Lbl'] ?? null;
        $this->container['field3Info'] = $data['field3Info'] ?? null;
        $this->container['field3Type'] = $data['field3Type'] ?? null;
        $this->container['field3ReasonUsage'] = $data['field3ReasonUsage'] ?? null;
        $this->container['field3Default'] = $data['field3Default'] ?? null;
        $this->container['field3Used'] = $data['field3Used'] ?? null;
        $this->container['field4Lbl'] = $data['field4Lbl'] ?? null;
        $this->container['field4Info'] = $data['field4Info'] ?? null;
        $this->container['field4Type'] = $data['field4Type'] ?? null;
        $this->container['field4ReasonUsage'] = $data['field4ReasonUsage'] ?? null;
        $this->container['field4Default'] = $data['field4Default'] ?? null;
        $this->container['field4Used'] = $data['field4Used'] ?? null;
        $this->container['field5Lbl'] = $data['field5Lbl'] ?? null;
        $this->container['field5Info'] = $data['field5Info'] ?? null;
        $this->container['field5Type'] = $data['field5Type'] ?? null;
        $this->container['field5ReasonUsage'] = $data['field5ReasonUsage'] ?? null;
        $this->container['field5Default'] = $data['field5Default'] ?? null;
        $this->container['field5Used'] = $data['field5Used'] ?? null;
        $this->container['onePerDev'] = $data['onePerDev'] ?? null;
    }

    /**
     * Show all the invalid properties with reasons.
     *
     * @return array invalid properties with reasons
     */
    public function listInvalidProperties()
    {
        $invalidProperties = [];

        return $invalidProperties;
    }

    /**
     * Validate all the properties in the model
     * return true if all passed
     *
     * @return bool True if all properties are valid
     */
    public function valid()
    {
        return count($this->listInvalidProperties()) === 0;
    }


    /**
     * Gets id
     *
     * @return int|null
     */
    public function getId()
    {
        return $this->container['id'];
    }

    /**
     * Sets id
     *
     * @param int|null $id Unique print identifier
     *
     * @return self
     */
    public function setId($id)
    {
        $this->container['id'] = $id;

        return $this;
    }

    /**
     * Gets name
     *
     * @return string|null
     */
    public function getName()
    {
        return $this->container['name'];
    }

    /**
     * Sets name
     *
     * @param string|null $name Printer name
     *
     * @return self
     */
    public function setName($name)
    {
        $this->container['name'] = $name;

        return $this;
    }

    /**
     * Gets defaultLineWidth
     *
     * @return int|null
     */
    public function getDefaultLineWidth()
    {
        return $this->container['defaultLineWidth'];
    }

    /**
     * Sets defaultLineWidth
     *
     * @param int|null $defaultLineWidth Default line width
     *
     * @return self
     */
    public function setDefaultLineWidth($defaultLineWidth)
    {
        $this->container['defaultLineWidth'] = $defaultLineWidth;

        return $this;
    }

    /**
     * Gets printFeedLength
     *
     * @return int|null
     */
    public function getPrintFeedLength()
    {
        return $this->container['printFeedLength'];
    }

    /**
     * Sets printFeedLength
     *
     * @param int|null $printFeedLength Print feed length
     *
     * @return self
     */
    public function setPrintFeedLength($printFeedLength)
    {
        $this->container['printFeedLength'] = $printFeedLength;

        return $this;
    }

    /**
     * Gets field1Lbl
     *
     * @return string|null
     */
    public function getField1Lbl()
    {
        return $this->container['field1Lbl'];
    }

    /**
     * Sets field1Lbl
     *
     * @param string|null $field1Lbl field1Lbl
     *
     * @return self
     */
    public function setField1Lbl($field1Lbl)
    {
        $this->container['field1Lbl'] = $field1Lbl;

        return $this;
    }

    /**
     * Gets field1Info
     *
     * @return string|null
     */
    public function getField1Info()
    {
        return $this->container['field1Info'];
    }

    /**
     * Sets field1Info
     *
     * @param string|null $field1Info field1Info
     *
     * @return self
     */
    public function setField1Info($field1Info)
    {
        $this->container['field1Info'] = $field1Info;

        return $this;
    }

    /**
     * Gets field1Type
     *
     * @return string|null
     */
    public function getField1Type()
    {
        return $this->container['field1Type'];
    }

    /**
     * Sets field1Type
     *
     * @param string|null $field1Type field1Type
     *
     * @return self
     */
    public function setField1Type($field1Type)
    {
        $this->container['field1Type'] = $field1Type;

        return $this;
    }

    /**
     * Gets field1ReasonUsage
     *
     * @return int|null
     */
    public function getField1ReasonUsage()
    {
        return $this->container['field1ReasonUsage'];
    }

    /**
     * Sets field1ReasonUsage
     *
     * @param int|null $field1ReasonUsage Reference ReasonUsage usage
     *
     * @return self
     */
    public function setField1ReasonUsage($field1ReasonUsage)
    {
        $this->container['field1ReasonUsage'] = $field1ReasonUsage;

        return $this;
    }

    /**
     * Gets field1Default
     *
     * @return string|null
     */
    public function getField1Default()
    {
        return $this->container['field1Default'];
    }

    /**
     * Sets field1Default
     *
     * @param string|null $field1Default Default value
     *
     * @return self
     */
    public function setField1Default($field1Default)
    {
        $this->container['field1Default'] = $field1Default;

        return $this;
    }

    /**
     * Gets field1Used
     *
     * @return bool|null
     */
    public function getField1Used()
    {
        return $this->container['field1Used'];
    }

    /**
     * Sets field1Used
     *
     * @param bool|null $field1Used Is used
     *
     * @return self
     */
    public function setField1Used($field1Used)
    {
        $this->container['field1Used'] = $field1Used;

        return $this;
    }

    /**
     * Gets field2Lbl
     *
     * @return string|null
     */
    public function getField2Lbl()
    {
        return $this->container['field2Lbl'];
    }

    /**
     * Sets field2Lbl
     *
     * @param string|null $field2Lbl field2Lbl
     *
     * @return self
     */
    public function setField2Lbl($field2Lbl)
    {
        $this->container['field2Lbl'] = $field2Lbl;

        return $this;
    }

    /**
     * Gets field2Info
     *
     * @return string|null
     */
    public function getField2Info()
    {
        return $this->container['field2Info'];
    }

    /**
     * Sets field2Info
     *
     * @param string|null $field2Info field2Info
     *
     * @return self
     */
    public function setField2Info($field2Info)
    {
        $this->container['field2Info'] = $field2Info;

        return $this;
    }

    /**
     * Gets field2Type
     *
     * @return string|null
     */
    public function getField2Type()
    {
        return $this->container['field2Type'];
    }

    /**
     * Sets field2Type
     *
     * @param string|null $field2Type field2Type
     *
     * @return self
     */
    public function setField2Type($field2Type)
    {
        $this->container['field2Type'] = $field2Type;

        return $this;
    }

    /**
     * Gets field2ReasonUsage
     *
     * @return int|null
     */
    public function getField2ReasonUsage()
    {
        return $this->container['field2ReasonUsage'];
    }

    /**
     * Sets field2ReasonUsage
     *
     * @param int|null $field2ReasonUsage Reference ReasonUsage usage
     *
     * @return self
     */
    public function setField2ReasonUsage($field2ReasonUsage)
    {
        $this->container['field2ReasonUsage'] = $field2ReasonUsage;

        return $this;
    }

    /**
     * Gets field2Default
     *
     * @return string|null
     */
    public function getField2Default()
    {
        return $this->container['field2Default'];
    }

    /**
     * Sets field2Default
     *
     * @param string|null $field2Default Default value
     *
     * @return self
     */
    public function setField2Default($field2Default)
    {
        $this->container['field2Default'] = $field2Default;

        return $this;
    }

    /**
     * Gets field2Used
     *
     * @return bool|null
     */
    public function getField2Used()
    {
        return $this->container['field2Used'];
    }

    /**
     * Sets field2Used
     *
     * @param bool|null $field2Used Is used
     *
     * @return self
     */
    public function setField2Used($field2Used)
    {
        $this->container['field2Used'] = $field2Used;

        return $this;
    }

    /**
     * Gets field3Lbl
     *
     * @return string|null
     */
    public function getField3Lbl()
    {
        return $this->container['field3Lbl'];
    }

    /**
     * Sets field3Lbl
     *
     * @param string|null $field3Lbl field3Lbl
     *
     * @return self
     */
    public function setField3Lbl($field3Lbl)
    {
        $this->container['field3Lbl'] = $field3Lbl;

        return $this;
    }

    /**
     * Gets field3Info
     *
     * @return string|null
     */
    public function getField3Info()
    {
        return $this->container['field3Info'];
    }

    /**
     * Sets field3Info
     *
     * @param string|null $field3Info field3Info
     *
     * @return self
     */
    public function setField3Info($field3Info)
    {
        $this->container['field3Info'] = $field3Info;

        return $this;
    }

    /**
     * Gets field3Type
     *
     * @return string|null
     */
    public function getField3Type()
    {
        return $this->container['field3Type'];
    }

    /**
     * Sets field3Type
     *
     * @param string|null $field3Type field3Type
     *
     * @return self
     */
    public function setField3Type($field3Type)
    {
        $this->container['field3Type'] = $field3Type;

        return $this;
    }

    /**
     * Gets field3ReasonUsage
     *
     * @return int|null
     */
    public function getField3ReasonUsage()
    {
        return $this->container['field3ReasonUsage'];
    }

    /**
     * Sets field3ReasonUsage
     *
     * @param int|null $field3ReasonUsage Reference ReasonUsage usage
     *
     * @return self
     */
    public function setField3ReasonUsage($field3ReasonUsage)
    {
        $this->container['field3ReasonUsage'] = $field3ReasonUsage;

        return $this;
    }

    /**
     * Gets field3Default
     *
     * @return string|null
     */
    public function getField3Default()
    {
        return $this->container['field3Default'];
    }

    /**
     * Sets field3Default
     *
     * @param string|null $field3Default Default value
     *
     * @return self
     */
    public function setField3Default($field3Default)
    {
        $this->container['field3Default'] = $field3Default;

        return $this;
    }

    /**
     * Gets field3Used
     *
     * @return bool|null
     */
    public function getField3Used()
    {
        return $this->container['field3Used'];
    }

    /**
     * Sets field3Used
     *
     * @param bool|null $field3Used Is used
     *
     * @return self
     */
    public function setField3Used($field3Used)
    {
        $this->container['field3Used'] = $field3Used;

        return $this;
    }

    /**
     * Gets field4Lbl
     *
     * @return string|null
     */
    public function getField4Lbl()
    {
        return $this->container['field4Lbl'];
    }

    /**
     * Sets field4Lbl
     *
     * @param string|null $field4Lbl field4Lbl
     *
     * @return self
     */
    public function setField4Lbl($field4Lbl)
    {
        $this->container['field4Lbl'] = $field4Lbl;

        return $this;
    }

    /**
     * Gets field4Info
     *
     * @return string|null
     */
    public function getField4Info()
    {
        return $this->container['field4Info'];
    }

    /**
     * Sets field4Info
     *
     * @param string|null $field4Info field4Info
     *
     * @return self
     */
    public function setField4Info($field4Info)
    {
        $this->container['field4Info'] = $field4Info;

        return $this;
    }

    /**
     * Gets field4Type
     *
     * @return string|null
     */
    public function getField4Type()
    {
        return $this->container['field4Type'];
    }

    /**
     * Sets field4Type
     *
     * @param string|null $field4Type field4Type
     *
     * @return self
     */
    public function setField4Type($field4Type)
    {
        $this->container['field4Type'] = $field4Type;

        return $this;
    }

    /**
     * Gets field4ReasonUsage
     *
     * @return int|null
     */
    public function getField4ReasonUsage()
    {
        return $this->container['field4ReasonUsage'];
    }

    /**
     * Sets field4ReasonUsage
     *
     * @param int|null $field4ReasonUsage Reference ReasonUsage usage
     *
     * @return self
     */
    public function setField4ReasonUsage($field4ReasonUsage)
    {
        $this->container['field4ReasonUsage'] = $field4ReasonUsage;

        return $this;
    }

    /**
     * Gets field4Default
     *
     * @return string|null
     */
    public function getField4Default()
    {
        return $this->container['field4Default'];
    }

    /**
     * Sets field4Default
     *
     * @param string|null $field4Default Default value
     *
     * @return self
     */
    public function setField4Default($field4Default)
    {
        $this->container['field4Default'] = $field4Default;

        return $this;
    }

    /**
     * Gets field4Used
     *
     * @return bool|null
     */
    public function getField4Used()
    {
        return $this->container['field4Used'];
    }

    /**
     * Sets field4Used
     *
     * @param bool|null $field4Used Is used
     *
     * @return self
     */
    public function setField4Used($field4Used)
    {
        $this->container['field4Used'] = $field4Used;

        return $this;
    }

    /**
     * Gets field5Lbl
     *
     * @return string|null
     */
    public function getField5Lbl()
    {
        return $this->container['field5Lbl'];
    }

    /**
     * Sets field5Lbl
     *
     * @param string|null $field5Lbl field5Lbl
     *
     * @return self
     */
    public function setField5Lbl($field5Lbl)
    {
        $this->container['field5Lbl'] = $field5Lbl;

        return $this;
    }

    /**
     * Gets field5Info
     *
     * @return string|null
     */
    public function getField5Info()
    {
        return $this->container['field5Info'];
    }

    /**
     * Sets field5Info
     *
     * @param string|null $field5Info field5Info
     *
     * @return self
     */
    public function setField5Info($field5Info)
    {
        $this->container['field5Info'] = $field5Info;

        return $this;
    }

    /**
     * Gets field5Type
     *
     * @return string|null
     */
    public function getField5Type()
    {
        return $this->container['field5Type'];
    }

    /**
     * Sets field5Type
     *
     * @param string|null $field5Type field5Type
     *
     * @return self
     */
    public function setField5Type($field5Type)
    {
        $this->container['field5Type'] = $field5Type;

        return $this;
    }

    /**
     * Gets field5ReasonUsage
     *
     * @return int|null
     */
    public function getField5ReasonUsage()
    {
        return $this->container['field5ReasonUsage'];
    }

    /**
     * Sets field5ReasonUsage
     *
     * @param int|null $field5ReasonUsage Reference ReasonUsage usage
     *
     * @return self
     */
    public function setField5ReasonUsage($field5ReasonUsage)
    {
        $this->container['field5ReasonUsage'] = $field5ReasonUsage;

        return $this;
    }

    /**
     * Gets field5Default
     *
     * @return string|null
     */
    public function getField5Default()
    {
        return $this->container['field5Default'];
    }

    /**
     * Sets field5Default
     *
     * @param string|null $field5Default Default value
     *
     * @return self
     */
    public function setField5Default($field5Default)
    {
        $this->container['field5Default'] = $field5Default;

        return $this;
    }

    /**
     * Gets field5Used
     *
     * @return bool|null
     */
    public function getField5Used()
    {
        return $this->container['field5Used'];
    }

    /**
     * Sets field5Used
     *
     * @param bool|null $field5Used Is used
     *
     * @return self
     */
    public function setField5Used($field5Used)
    {
        $this->container['field5Used'] = $field5Used;

        return $this;
    }

    /**
     * Gets onePerDev
     *
     * @return bool|null
     */
    public function getOnePerDev()
    {
        return $this->container['onePerDev'];
    }

    /**
     * Sets onePerDev
     *
     * @param bool|null $onePerDev onePerDev
     *
     * @return self
     */
    public function setOnePerDev($onePerDev)
    {
        $this->container['onePerDev'] = $onePerDev;

        return $this;
    }
    /**
     * 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
     */
    #[\ReturnTypeWillChange]
    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.
     */
    #[\ReturnTypeWillChange]
    public function jsonSerialize()
    {
       return ObjectSerializer::sanitizeForSerialization($this);
    }

    /**
     * Gets the string presentation of the object
     *
     * @return string
     */
    public function __toString()
    {
        return json_encode(
            ObjectSerializer::sanitizeForSerialization($this),
            JSON_PRETTY_PRINT
        );
    }

    /**
     * Gets a header-safe presentation of the object
     *
     * @return string
     */
    public function toHeaderValue()
    {
        return json_encode(ObjectSerializer::sanitizeForSerialization($this));
    }
}


