<?php

/**
 * AllCoinsInformationResponseInnerNetworkListInnerNetworkListInner.
 *
 * PHP version 8.1
 *
 * @category Class
 *
 * @author   OpenAPI Generator team
 *
 * @see     https://openapi-generator.tech
 */

/**
 * Binance Wallet REST API.
 *
 * OpenAPI Specification for the Binance Wallet REST API
 *
 * The version of the OpenAPI document: 1.0.0
 * Generated by: https://openapi-generator.tech
 * Generator version: 7.12.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 Binance\Client\Wallet\Model;

use Binance\Common\Dtos\ModelInterface;
use Binance\Common\ObjectSerializer;

/**
 * AllCoinsInformationResponseInnerNetworkListInnerNetworkListInner Class Doc Comment.
 *
 * @category Class
 *
 * @author   OpenAPI Generator team
 *
 * @see     https://openapi-generator.tech
 *
 * @implements \ArrayAccess<string, mixed>
 */
class AllCoinsInformationResponseInnerNetworkListInnerNetworkListInner implements ModelInterface, \ArrayAccess, \JsonSerializable
{
    public const DISCRIMINATOR = null;

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

    /**
     * Array of property to type mappings. Used for (de)serialization.
     *
     * @var string[]
     */
    protected static $openAPITypes = [
        'network' => 'string',
        'coin' => 'string',
        'withdrawIntegerMultiple' => 'string',
        'isDefault' => 'bool',
        'depositEnable' => 'bool',
        'withdrawEnable' => 'bool',
        'depositDesc' => 'string',
        'withdrawDesc' => 'string',
        'specialTips' => 'string',
        'specialWithdrawTips' => 'string',
        'name' => 'string',
        'resetAddressStatus' => 'bool',
        'addressRegex' => 'string',
        'memoRegex' => 'string',
        'withdrawFee' => 'string',
        'withdrawMin' => 'string',
        'withdrawMax' => 'string',
        'withdrawInternalMin' => 'string',
        'depositDust' => 'string',
        'minConfirm' => 'int',
        'unLockConfirm' => 'int',
        'sameAddress' => 'bool',
        'estimatedArrivalTime' => 'int',
        'busy' => 'bool',
        'contractAddressUrl' => 'string',
        'contractAddress' => 'string',
        'denomination' => 'int',
    ];

    /**
     * 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 = [
        'network' => null,
        'coin' => null,
        'withdrawIntegerMultiple' => null,
        'isDefault' => null,
        'depositEnable' => null,
        'withdrawEnable' => null,
        'depositDesc' => null,
        'withdrawDesc' => null,
        'specialTips' => null,
        'specialWithdrawTips' => null,
        'name' => null,
        'resetAddressStatus' => null,
        'addressRegex' => null,
        'memoRegex' => null,
        'withdrawFee' => null,
        'withdrawMin' => null,
        'withdrawMax' => null,
        'withdrawInternalMin' => null,
        'depositDust' => null,
        'minConfirm' => 'int64',
        'unLockConfirm' => 'int64',
        'sameAddress' => null,
        'estimatedArrivalTime' => 'int64',
        'busy' => null,
        'contractAddressUrl' => null,
        'contractAddress' => null,
        'denomination' => 'int64',
    ];

    /**
     * Array of nullable properties. Used for (de)serialization.
     *
     * @var bool[]
     */
    protected static array $openAPINullables = [
        'network' => false,
        'coin' => false,
        'withdrawIntegerMultiple' => false,
        'isDefault' => false,
        'depositEnable' => false,
        'withdrawEnable' => false,
        'depositDesc' => false,
        'withdrawDesc' => false,
        'specialTips' => false,
        'specialWithdrawTips' => false,
        'name' => false,
        'resetAddressStatus' => false,
        'addressRegex' => false,
        'memoRegex' => false,
        'withdrawFee' => false,
        'withdrawMin' => false,
        'withdrawMax' => false,
        'withdrawInternalMin' => false,
        'depositDust' => false,
        'minConfirm' => false,
        'unLockConfirm' => false,
        'sameAddress' => false,
        'estimatedArrivalTime' => false,
        'busy' => false,
        'contractAddressUrl' => false,
        'contractAddress' => false,
        'denomination' => false,
    ];

    /**
     * If a nullable field gets set to null, insert it here.
     *
     * @var bool[]
     */
    protected array $openAPINullablesSetToNull = [];

    /**
     * Array of attributes where the key is the local name,
     * and the value is the original name.
     *
     * @var string[]
     */
    protected static $attributeMap = [
        'network' => 'network',
        'coin' => 'coin',
        'withdrawIntegerMultiple' => 'withdrawIntegerMultiple',
        'isDefault' => 'isDefault',
        'depositEnable' => 'depositEnable',
        'withdrawEnable' => 'withdrawEnable',
        'depositDesc' => 'depositDesc',
        'withdrawDesc' => 'withdrawDesc',
        'specialTips' => 'specialTips',
        'specialWithdrawTips' => 'specialWithdrawTips',
        'name' => 'name',
        'resetAddressStatus' => 'resetAddressStatus',
        'addressRegex' => 'addressRegex',
        'memoRegex' => 'memoRegex',
        'withdrawFee' => 'withdrawFee',
        'withdrawMin' => 'withdrawMin',
        'withdrawMax' => 'withdrawMax',
        'withdrawInternalMin' => 'withdrawInternalMin',
        'depositDust' => 'depositDust',
        'minConfirm' => 'minConfirm',
        'unLockConfirm' => 'unLockConfirm',
        'sameAddress' => 'sameAddress',
        'estimatedArrivalTime' => 'estimatedArrivalTime',
        'busy' => 'busy',
        'contractAddressUrl' => 'contractAddressUrl',
        'contractAddress' => 'contractAddress',
        'denomination' => 'denomination',
    ];

    /**
     * Array of attributes to setter functions (for deserialization of responses).
     *
     * @var string[]
     */
    protected static $setters = [
        'network' => 'setNetwork',
        'coin' => 'setCoin',
        'withdrawIntegerMultiple' => 'setWithdrawIntegerMultiple',
        'isDefault' => 'setIsDefault',
        'depositEnable' => 'setDepositEnable',
        'withdrawEnable' => 'setWithdrawEnable',
        'depositDesc' => 'setDepositDesc',
        'withdrawDesc' => 'setWithdrawDesc',
        'specialTips' => 'setSpecialTips',
        'specialWithdrawTips' => 'setSpecialWithdrawTips',
        'name' => 'setName',
        'resetAddressStatus' => 'setResetAddressStatus',
        'addressRegex' => 'setAddressRegex',
        'memoRegex' => 'setMemoRegex',
        'withdrawFee' => 'setWithdrawFee',
        'withdrawMin' => 'setWithdrawMin',
        'withdrawMax' => 'setWithdrawMax',
        'withdrawInternalMin' => 'setWithdrawInternalMin',
        'depositDust' => 'setDepositDust',
        'minConfirm' => 'setMinConfirm',
        'unLockConfirm' => 'setUnLockConfirm',
        'sameAddress' => 'setSameAddress',
        'estimatedArrivalTime' => 'setEstimatedArrivalTime',
        'busy' => 'setBusy',
        'contractAddressUrl' => 'setContractAddressUrl',
        'contractAddress' => 'setContractAddress',
        'denomination' => 'setDenomination',
    ];

    /**
     * Array of attributes to getter functions (for serialization of requests).
     *
     * @var string[]
     */
    protected static $getters = [
        'network' => 'getNetwork',
        'coin' => 'getCoin',
        'withdrawIntegerMultiple' => 'getWithdrawIntegerMultiple',
        'isDefault' => 'getIsDefault',
        'depositEnable' => 'getDepositEnable',
        'withdrawEnable' => 'getWithdrawEnable',
        'depositDesc' => 'getDepositDesc',
        'withdrawDesc' => 'getWithdrawDesc',
        'specialTips' => 'getSpecialTips',
        'specialWithdrawTips' => 'getSpecialWithdrawTips',
        'name' => 'getName',
        'resetAddressStatus' => 'getResetAddressStatus',
        'addressRegex' => 'getAddressRegex',
        'memoRegex' => 'getMemoRegex',
        'withdrawFee' => 'getWithdrawFee',
        'withdrawMin' => 'getWithdrawMin',
        'withdrawMax' => 'getWithdrawMax',
        'withdrawInternalMin' => 'getWithdrawInternalMin',
        'depositDust' => 'getDepositDust',
        'minConfirm' => 'getMinConfirm',
        'unLockConfirm' => 'getUnLockConfirm',
        'sameAddress' => 'getSameAddress',
        'estimatedArrivalTime' => 'getEstimatedArrivalTime',
        'busy' => 'getBusy',
        'contractAddressUrl' => 'getContractAddressUrl',
        'contractAddress' => 'getContractAddress',
        'denomination' => 'getDenomination',
    ];

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

    /**
     * Constructor.
     *
     * @param null|mixed[] $data Associated array of property values
     *                           initializing the model
     */
    public function __construct(?array $data = null)
    {
        $this->setIfExists('network', $data ?? [], null);
        $this->setIfExists('coin', $data ?? [], null);
        $this->setIfExists('withdrawIntegerMultiple', $data ?? [], null);
        $this->setIfExists('isDefault', $data ?? [], null);
        $this->setIfExists('depositEnable', $data ?? [], null);
        $this->setIfExists('withdrawEnable', $data ?? [], null);
        $this->setIfExists('depositDesc', $data ?? [], null);
        $this->setIfExists('withdrawDesc', $data ?? [], null);
        $this->setIfExists('specialTips', $data ?? [], null);
        $this->setIfExists('specialWithdrawTips', $data ?? [], null);
        $this->setIfExists('name', $data ?? [], null);
        $this->setIfExists('resetAddressStatus', $data ?? [], null);
        $this->setIfExists('addressRegex', $data ?? [], null);
        $this->setIfExists('memoRegex', $data ?? [], null);
        $this->setIfExists('withdrawFee', $data ?? [], null);
        $this->setIfExists('withdrawMin', $data ?? [], null);
        $this->setIfExists('withdrawMax', $data ?? [], null);
        $this->setIfExists('withdrawInternalMin', $data ?? [], null);
        $this->setIfExists('depositDust', $data ?? [], null);
        $this->setIfExists('minConfirm', $data ?? [], null);
        $this->setIfExists('unLockConfirm', $data ?? [], null);
        $this->setIfExists('sameAddress', $data ?? [], null);
        $this->setIfExists('estimatedArrivalTime', $data ?? [], null);
        $this->setIfExists('busy', $data ?? [], null);
        $this->setIfExists('contractAddressUrl', $data ?? [], null);
        $this->setIfExists('contractAddress', $data ?? [], null);
        $this->setIfExists('denomination', $data ?? [], null);
    }

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

    /**
     * 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;
    }

    /**
     * If oneOf schema, get the possible response types.
     */
    public static function getComposedSchemas(): array
    {
        return [
        ];
    }

    /**
     * Return true if the model is an array.
     */
    public static function isArray(): bool
    {
        return false;
    }

    /**
     * Checks if a property is nullable.
     */
    public static function isNullable(string $property): bool
    {
        return self::openAPINullables()[$property] ?? false;
    }

    /**
     * Checks if a nullable property is set to null.
     */
    public function isNullableSetToNull(string $property): bool
    {
        return in_array($property, $this->getOpenAPINullablesSetToNull(), true);
    }

    /**
     * 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;
    }

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

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

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

    /**
     * Sets network.
     *
     * @param null|string $network network
     *
     * @return self
     */
    public function setNetwork($network)
    {
        if (is_null($network)) {
            throw new \InvalidArgumentException('non-nullable network cannot be null');
        }
        $this->container['network'] = $network;

        return $this;
    }

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

    /**
     * Sets coin.
     *
     * @param null|string $coin coin
     *
     * @return self
     */
    public function setCoin($coin)
    {
        if (is_null($coin)) {
            throw new \InvalidArgumentException('non-nullable coin cannot be null');
        }
        $this->container['coin'] = $coin;

        return $this;
    }

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

    /**
     * Sets withdrawIntegerMultiple.
     *
     * @param null|string $withdrawIntegerMultiple withdrawIntegerMultiple
     *
     * @return self
     */
    public function setWithdrawIntegerMultiple($withdrawIntegerMultiple)
    {
        if (is_null($withdrawIntegerMultiple)) {
            throw new \InvalidArgumentException('non-nullable withdrawIntegerMultiple cannot be null');
        }
        $this->container['withdrawIntegerMultiple'] = $withdrawIntegerMultiple;

        return $this;
    }

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

    /**
     * Sets isDefault.
     *
     * @param null|bool $isDefault isDefault
     *
     * @return self
     */
    public function setIsDefault($isDefault)
    {
        if (is_null($isDefault)) {
            throw new \InvalidArgumentException('non-nullable isDefault cannot be null');
        }
        $this->container['isDefault'] = $isDefault;

        return $this;
    }

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

    /**
     * Sets depositEnable.
     *
     * @param null|bool $depositEnable depositEnable
     *
     * @return self
     */
    public function setDepositEnable($depositEnable)
    {
        if (is_null($depositEnable)) {
            throw new \InvalidArgumentException('non-nullable depositEnable cannot be null');
        }
        $this->container['depositEnable'] = $depositEnable;

        return $this;
    }

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

    /**
     * Sets withdrawEnable.
     *
     * @param null|bool $withdrawEnable withdrawEnable
     *
     * @return self
     */
    public function setWithdrawEnable($withdrawEnable)
    {
        if (is_null($withdrawEnable)) {
            throw new \InvalidArgumentException('non-nullable withdrawEnable cannot be null');
        }
        $this->container['withdrawEnable'] = $withdrawEnable;

        return $this;
    }

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

    /**
     * Sets depositDesc.
     *
     * @param null|string $depositDesc depositDesc
     *
     * @return self
     */
    public function setDepositDesc($depositDesc)
    {
        if (is_null($depositDesc)) {
            throw new \InvalidArgumentException('non-nullable depositDesc cannot be null');
        }
        $this->container['depositDesc'] = $depositDesc;

        return $this;
    }

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

    /**
     * Sets withdrawDesc.
     *
     * @param null|string $withdrawDesc withdrawDesc
     *
     * @return self
     */
    public function setWithdrawDesc($withdrawDesc)
    {
        if (is_null($withdrawDesc)) {
            throw new \InvalidArgumentException('non-nullable withdrawDesc cannot be null');
        }
        $this->container['withdrawDesc'] = $withdrawDesc;

        return $this;
    }

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

    /**
     * Sets specialTips.
     *
     * @param null|string $specialTips specialTips
     *
     * @return self
     */
    public function setSpecialTips($specialTips)
    {
        if (is_null($specialTips)) {
            throw new \InvalidArgumentException('non-nullable specialTips cannot be null');
        }
        $this->container['specialTips'] = $specialTips;

        return $this;
    }

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

    /**
     * Sets specialWithdrawTips.
     *
     * @param null|string $specialWithdrawTips specialWithdrawTips
     *
     * @return self
     */
    public function setSpecialWithdrawTips($specialWithdrawTips)
    {
        if (is_null($specialWithdrawTips)) {
            throw new \InvalidArgumentException('non-nullable specialWithdrawTips cannot be null');
        }
        $this->container['specialWithdrawTips'] = $specialWithdrawTips;

        return $this;
    }

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

    /**
     * Sets name.
     *
     * @param null|string $name name
     *
     * @return self
     */
    public function setName($name)
    {
        if (is_null($name)) {
            throw new \InvalidArgumentException('non-nullable name cannot be null');
        }
        $this->container['name'] = $name;

        return $this;
    }

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

    /**
     * Sets resetAddressStatus.
     *
     * @param null|bool $resetAddressStatus resetAddressStatus
     *
     * @return self
     */
    public function setResetAddressStatus($resetAddressStatus)
    {
        if (is_null($resetAddressStatus)) {
            throw new \InvalidArgumentException('non-nullable resetAddressStatus cannot be null');
        }
        $this->container['resetAddressStatus'] = $resetAddressStatus;

        return $this;
    }

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

    /**
     * Sets addressRegex.
     *
     * @param null|string $addressRegex addressRegex
     *
     * @return self
     */
    public function setAddressRegex($addressRegex)
    {
        if (is_null($addressRegex)) {
            throw new \InvalidArgumentException('non-nullable addressRegex cannot be null');
        }
        $this->container['addressRegex'] = $addressRegex;

        return $this;
    }

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

    /**
     * Sets memoRegex.
     *
     * @param null|string $memoRegex memoRegex
     *
     * @return self
     */
    public function setMemoRegex($memoRegex)
    {
        if (is_null($memoRegex)) {
            throw new \InvalidArgumentException('non-nullable memoRegex cannot be null');
        }
        $this->container['memoRegex'] = $memoRegex;

        return $this;
    }

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

    /**
     * Sets withdrawFee.
     *
     * @param null|string $withdrawFee withdrawFee
     *
     * @return self
     */
    public function setWithdrawFee($withdrawFee)
    {
        if (is_null($withdrawFee)) {
            throw new \InvalidArgumentException('non-nullable withdrawFee cannot be null');
        }
        $this->container['withdrawFee'] = $withdrawFee;

        return $this;
    }

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

    /**
     * Sets withdrawMin.
     *
     * @param null|string $withdrawMin withdrawMin
     *
     * @return self
     */
    public function setWithdrawMin($withdrawMin)
    {
        if (is_null($withdrawMin)) {
            throw new \InvalidArgumentException('non-nullable withdrawMin cannot be null');
        }
        $this->container['withdrawMin'] = $withdrawMin;

        return $this;
    }

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

    /**
     * Sets withdrawMax.
     *
     * @param null|string $withdrawMax withdrawMax
     *
     * @return self
     */
    public function setWithdrawMax($withdrawMax)
    {
        if (is_null($withdrawMax)) {
            throw new \InvalidArgumentException('non-nullable withdrawMax cannot be null');
        }
        $this->container['withdrawMax'] = $withdrawMax;

        return $this;
    }

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

    /**
     * Sets withdrawInternalMin.
     *
     * @param null|string $withdrawInternalMin withdrawInternalMin
     *
     * @return self
     */
    public function setWithdrawInternalMin($withdrawInternalMin)
    {
        if (is_null($withdrawInternalMin)) {
            throw new \InvalidArgumentException('non-nullable withdrawInternalMin cannot be null');
        }
        $this->container['withdrawInternalMin'] = $withdrawInternalMin;

        return $this;
    }

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

    /**
     * Sets depositDust.
     *
     * @param null|string $depositDust depositDust
     *
     * @return self
     */
    public function setDepositDust($depositDust)
    {
        if (is_null($depositDust)) {
            throw new \InvalidArgumentException('non-nullable depositDust cannot be null');
        }
        $this->container['depositDust'] = $depositDust;

        return $this;
    }

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

    /**
     * Sets minConfirm.
     *
     * @param null|int $minConfirm minConfirm
     *
     * @return self
     */
    public function setMinConfirm($minConfirm)
    {
        if (is_null($minConfirm)) {
            throw new \InvalidArgumentException('non-nullable minConfirm cannot be null');
        }
        $this->container['minConfirm'] = $minConfirm;

        return $this;
    }

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

    /**
     * Sets unLockConfirm.
     *
     * @param null|int $unLockConfirm unLockConfirm
     *
     * @return self
     */
    public function setUnLockConfirm($unLockConfirm)
    {
        if (is_null($unLockConfirm)) {
            throw new \InvalidArgumentException('non-nullable unLockConfirm cannot be null');
        }
        $this->container['unLockConfirm'] = $unLockConfirm;

        return $this;
    }

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

    /**
     * Sets sameAddress.
     *
     * @param null|bool $sameAddress sameAddress
     *
     * @return self
     */
    public function setSameAddress($sameAddress)
    {
        if (is_null($sameAddress)) {
            throw new \InvalidArgumentException('non-nullable sameAddress cannot be null');
        }
        $this->container['sameAddress'] = $sameAddress;

        return $this;
    }

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

    /**
     * Sets estimatedArrivalTime.
     *
     * @param null|int $estimatedArrivalTime estimatedArrivalTime
     *
     * @return self
     */
    public function setEstimatedArrivalTime($estimatedArrivalTime)
    {
        if (is_null($estimatedArrivalTime)) {
            throw new \InvalidArgumentException('non-nullable estimatedArrivalTime cannot be null');
        }
        $this->container['estimatedArrivalTime'] = $estimatedArrivalTime;

        return $this;
    }

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

    /**
     * Sets busy.
     *
     * @param null|bool $busy busy
     *
     * @return self
     */
    public function setBusy($busy)
    {
        if (is_null($busy)) {
            throw new \InvalidArgumentException('non-nullable busy cannot be null');
        }
        $this->container['busy'] = $busy;

        return $this;
    }

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

    /**
     * Sets contractAddressUrl.
     *
     * @param null|string $contractAddressUrl contractAddressUrl
     *
     * @return self
     */
    public function setContractAddressUrl($contractAddressUrl)
    {
        if (is_null($contractAddressUrl)) {
            throw new \InvalidArgumentException('non-nullable contractAddressUrl cannot be null');
        }
        $this->container['contractAddressUrl'] = $contractAddressUrl;

        return $this;
    }

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

    /**
     * Sets contractAddress.
     *
     * @param null|string $contractAddress contractAddress
     *
     * @return self
     */
    public function setContractAddress($contractAddress)
    {
        if (is_null($contractAddress)) {
            throw new \InvalidArgumentException('non-nullable contractAddress cannot be null');
        }
        $this->container['contractAddress'] = $contractAddress;

        return $this;
    }

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

    /**
     * Sets denomination.
     *
     * @param null|int $denomination denomination
     *
     * @return self
     */
    public function setDenomination($denomination)
    {
        if (is_null($denomination)) {
            throw new \InvalidArgumentException('non-nullable denomination cannot be null');
        }
        $this->container['denomination'] = $denomination;

        return $this;
    }

    /**
     * Returns true if offset exists. False otherwise.
     *
     * @param int $offset Offset
     */
    public function offsetExists($offset): bool
    {
        return isset($this->container[$offset]);
    }

    /**
     * Gets offset.
     *
     * @param int $offset Offset
     *
     * @return null|mixed
     */
    #[\ReturnTypeWillChange]
    public function offsetGet($offset)
    {
        return $this->container[$offset] ?? null;
    }

    /**
     * Sets value based on offset.
     *
     * @param null|int $offset Offset
     * @param mixed    $value  Value to be set
     */
    public function offsetSet($offset, $value): void
    {
        if (is_null($offset)) {
            $this->container[] = $value;
        } else {
            $this->container[$offset] = $value;
        }
    }

    /**
     * Unsets offset.
     *
     * @param int $offset Offset
     */
    public function offsetUnset($offset): void
    {
        unset($this->container[$offset]);
    }

    /**
     * Serializes the object to a value that can be serialized natively by json_encode().
     *
     * @see 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 a header-safe presentation of the object.
     *
     * @return string
     */
    public function toHeaderValue()
    {
        return json_encode(ObjectSerializer::sanitizeForSerialization($this));
    }

    /**
     * Array of nullable properties.
     */
    protected static function openAPINullables(): array
    {
        return self::$openAPINullables;
    }

    /**
     * Array of nullable field names deliberately set to null.
     *
     * @return bool[]
     */
    private function getOpenAPINullablesSetToNull(): array
    {
        return $this->openAPINullablesSetToNull;
    }

    /**
     * Setter - Array of nullable field names deliberately set to null.
     *
     * @param bool[] $openAPINullablesSetToNull
     */
    private function setOpenAPINullablesSetToNull(array $openAPINullablesSetToNull): void
    {
        $this->openAPINullablesSetToNull = $openAPINullablesSetToNull;
    }

    /**
     * Sets $this->container[$variableName] to the given data or to the given default Value; if $variableName
     * is nullable and its value is set to null in the $fields array, then mark it as "set to null" in the
     * $this->openAPINullablesSetToNull array.
     *
     * @param mixed $defaultValue
     */
    private function setIfExists(string $variableName, array $fields, $defaultValue): void
    {
        if (self::isNullable($variableName) && array_key_exists($variableName, $fields) && is_null($fields[$variableName])) {
            $this->openAPINullablesSetToNull[] = $variableName;
        }

        $this->container[$variableName] = $fields[$variableName] ?? $defaultValue;
    }
}
