"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports["default"] = void 0;
var _IPAddress = _interopRequireDefault(require("../../../common/v1/config/IPAddress"));
var _Metadata = _interopRequireDefault(require("../../../common/v1/config/Metadata"));
var _TenantAwareModel = _interopRequireDefault(require("../../../common/v1/config/TenantAwareModel"));
var _ExternalizableAbstractModel = _interopRequireDefault(require("../../../common/v1/response/ExternalizableAbstractModel"));
var _DhcpOptions = _interopRequireDefault(require("./DhcpOptions"));
var _IPConfig = _interopRequireDefault(require("./IPConfig"));
var _IPUsage = _interopRequireDefault(require("./IPUsage"));
var _MigrationState = _interopRequireDefault(require("./MigrationState"));
var _NetworkingBaseModel2 = _interopRequireDefault(require("./NetworkingBaseModel"));
var _SubnetType = _interopRequireDefault(require("./SubnetType"));
var _VirtualSwitch = _interopRequireDefault(require("./VirtualSwitch"));
var _Vpc = _interopRequireDefault(require("./Vpc"));
var _ValidationScopes = _interopRequireDefault(require("../../../validation/ValidationScopes"));
var _ValidationUtils = _interopRequireDefault(require("../../../../utils/ValidationUtils"));
var _ValidationError = _interopRequireDefault(require("../../../validation/ValidationError"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
function _classPrivateMethodInitSpec(e, a) { _checkPrivateRedeclaration(e, a), a.add(e); }
function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); } /*
 * Nutanix Networking APIs
 *
 * OpenAPI spec version: 4.0.1
 *
 * NOTE: This class is auto generated by the Open API Dev Platform.
 *
 * Open API Dev Platform Codegen version: 16.9.0.8546-RELEASE
 *
 * Do not edit the class manually.
 *
 */
/**
 * The Subnet model module.
 * @module Ntnx/Subnet
 * @version 4.0.1
 * @class Subnet
 * @extends NetworkingBaseModel
 */
var _Subnet_brand = /*#__PURE__*/new WeakSet();
var Subnet = exports["default"] = /*#__PURE__*/function (_NetworkingBaseModel) {
  /**
   * Constructs a new <code>Subnet</code>.
   * API schema for subnet.
   * @alias module:Ntnx/Subnet
   * @extends module:Ntnx/NetworkingBaseModel
  */
  function Subnet() {
    var _this;
    _classCallCheck(this, Subnet);
    _this = _callSuper(this, Subnet);
    /*
    * toJson method for a map type which supports map with primitive keys and values of object types
    * @param {Object} obj
    * @returns {Object|Map} Returns a new transofrmed Map by calling toJson on the values if applicable.
    * Otherwise, just returns the input object.
    */
    _classPrivateMethodInitSpec(_this, _Subnet_brand);
    _this.$objectType = "networking.v4.config.Subnet";
    /** @type {object<string, any>} */
    _this.$reserved = {
      '$fv': "v4.r0"
    };
    /** @type {object<string, any>} */
    _this.$unknownFields = {};
    return _this;
  }

  /**
   * Constructs a <code>Subnet</code> from a plain JavaScript object, optionally creating a new instance.
   * Copies all relevant properties from <code>data</code> to <code>obj</code> if supplied or a new instance if not.
   * @param {Object} data The plain JavaScript object bearing properties of interest.
   * @param {module:Ntnx/Subnet} obj Optional instance to populate.
   * @param callFromChild {Boolean} Flag to recognise calling instance
   * @return {module:Ntnx/Subnet} The populated <code>Subnet</code> instance.
   */
  _inherits(Subnet, _NetworkingBaseModel);
  return _createClass(Subnet, [{
    key: "getName",
    value:
    /**
     * Returns Name of the subnet.
     * @return {string}
     */
    function getName() {
      return this.name;
    }

    /**
     * Sets Name of the subnet.
     * @param {string} name Name of the subnet.
     */
  }, {
    key: "setName",
    value: function setName(name) {
      this.name = name;
    }

    /**
     * Returns Description of the subnet.
     * @return {string}
     */
  }, {
    key: "getDescription",
    value: function getDescription() {
      return this.description;
    }

    /**
     * Sets Description of the subnet.
     * @param {string} description Description of the subnet.
     */
  }, {
    key: "setDescription",
    value: function setDescription(description) {
      this.description = description;
    }

    /**
     * @return {SubnetType}
     */
  }, {
    key: "getSubnetType",
    value: function getSubnetType() {
      return this.subnetType;
    }

    /**
     * @param {SubnetType} subnetType
     */
  }, {
    key: "setSubnetType",
    value: function setSubnetType(subnetType) {
      this.subnetType = subnetType;
    }

    /**
     * Returns For VLAN subnet, this field represents VLAN Id, valid range is from 0 to 4095; For overlay subnet, this field represents 24-bit VNI, this field is read-only.
     * minimum: 0
     * maximum: 16777215
     * @return {Number}
     */
  }, {
    key: "getNetworkId",
    value: function getNetworkId() {
      return this.networkId;
    }

    /**
     * Sets For VLAN subnet, this field represents VLAN Id, valid range is from 0 to 4095; For overlay subnet, this field represents 24-bit VNI, this field is read-only.
     * @param {Number} networkId For VLAN subnet, this field represents VLAN Id, valid range is from 0 to 4095; For overlay subnet, this field represents 24-bit VNI, this field is read-only.
     */
  }, {
    key: "setNetworkId",
    value: function setNetworkId(networkId) {
      this.networkId = networkId;
    }

    /**
     * @return {DhcpOptions}
     */
  }, {
    key: "getDhcpOptions",
    value: function getDhcpOptions() {
      return this.dhcpOptions;
    }

    /**
     * @param {DhcpOptions} dhcpOptions
     */
  }, {
    key: "setDhcpOptions",
    value: function setDhcpOptions(dhcpOptions) {
      this.dhcpOptions = dhcpOptions;
    }

    /**
     * Returns IP configuration for the subnet.
     * @return {IPConfig[]}
     */
  }, {
    key: "getIpConfig",
    value: function getIpConfig() {
      return this.ipConfig;
    }

    /**
     * Sets IP configuration for the subnet.
     * @param {IPConfig[]} ipConfig IP configuration for the subnet.
     */
  }, {
    key: "setIpConfig",
    value: function setIpConfig(ipConfig) {
      this.ipConfig = ipConfig;
    }

    /**
     * Returns UUID of the cluster this subnet belongs to.
     * @return {string}
     */
  }, {
    key: "getClusterReference",
    value: function getClusterReference() {
      return this.clusterReference;
    }

    /**
     * Sets UUID of the cluster this subnet belongs to.
     * @param {string} clusterReference UUID of the cluster this subnet belongs to.
     */
  }, {
    key: "setClusterReference",
    value: function setClusterReference(clusterReference) {
      this.clusterReference = clusterReference;
    }

    /**
     * Returns UUID of the virtual switch this subnet belongs to (type VLAN only).
     * @return {string}
     */
  }, {
    key: "getVirtualSwitchReference",
    value: function getVirtualSwitchReference() {
      return this.virtualSwitchReference;
    }

    /**
     * Sets UUID of the virtual switch this subnet belongs to (type VLAN only).
     * @param {string} virtualSwitchReference UUID of the virtual switch this subnet belongs to (type VLAN only).
     */
  }, {
    key: "setVirtualSwitchReference",
    value: function setVirtualSwitchReference(virtualSwitchReference) {
      this.virtualSwitchReference = virtualSwitchReference;
    }

    /**
     * Returns UUID of Virtual Private Cloud this subnet belongs to (type Overlay only).
     * @return {string}
     */
  }, {
    key: "getVpcReference",
    value: function getVpcReference() {
      return this.vpcReference;
    }

    /**
     * Sets UUID of Virtual Private Cloud this subnet belongs to (type Overlay only).
     * @param {string} vpcReference UUID of Virtual Private Cloud this subnet belongs to (type Overlay only).
     */
  }, {
    key: "setVpcReference",
    value: function setVpcReference(vpcReference) {
      this.vpcReference = vpcReference;
    }

    /**
     * Returns Indicates whether NAT must be enabled for VPCs attached to the subnet. This is supported only for external subnets. NAT is enabled by default on external subnets.
     * @return {boolean}
     */
  }, {
    key: "getIsNatEnabled",
    value: function getIsNatEnabled() {
      return this.isNatEnabled;
    }

    /**
     * Sets Indicates whether NAT must be enabled for VPCs attached to the subnet. This is supported only for external subnets. NAT is enabled by default on external subnets.
     * @param {boolean} isNatEnabled Indicates whether NAT must be enabled for VPCs attached to the subnet. This is supported only for external subnets. NAT is enabled by default on external subnets.
     */
  }, {
    key: "setIsNatEnabled",
    value: function setIsNatEnabled(isNatEnabled) {
      this.isNatEnabled = isNatEnabled;
    }

    /**
     * Returns Indicates whether the subnet is used for external connectivity.
     * @return {boolean}
     */
  }, {
    key: "getIsExternal",
    value: function getIsExternal() {
      return this.isExternal;
    }

    /**
     * Sets Indicates whether the subnet is used for external connectivity.
     * @param {boolean} isExternal Indicates whether the subnet is used for external connectivity.
     */
  }, {
    key: "setIsExternal",
    value: function setIsExternal(isExternal) {
      this.isExternal = isExternal;
    }

    /**
     * Returns List of IPs that are excluded while allocating IP addresses to VM ports.
     * @return {IPAddress[]}
     */
  }, {
    key: "getReservedIpAddresses",
    value: function getReservedIpAddresses() {
      return this.reservedIpAddresses;
    }

    /**
     * Sets List of IPs that are excluded while allocating IP addresses to VM ports.
     * @param {IPAddress[]} reservedIpAddresses List of IPs that are excluded while allocating IP addresses to VM ports.
     */
  }, {
    key: "setReservedIpAddresses",
    value: function setReservedIpAddresses(reservedIpAddresses) {
      this.reservedIpAddresses = reservedIpAddresses;
    }

    /**
     * Returns List of IPs, which are a subset from the reserved IP address list, that must be advertised to the SDN gateway.
     * @return {IPAddress[]}
     */
  }, {
    key: "getDynamicIpAddresses",
    value: function getDynamicIpAddresses() {
      return this.dynamicIpAddresses;
    }

    /**
     * Sets List of IPs, which are a subset from the reserved IP address list, that must be advertised to the SDN gateway.
     * @param {IPAddress[]} dynamicIpAddresses List of IPs, which are a subset from the reserved IP address list, that must be advertised to the SDN gateway.
     */
  }, {
    key: "setDynamicIpAddresses",
    value: function setDynamicIpAddresses(dynamicIpAddresses) {
      this.dynamicIpAddresses = dynamicIpAddresses;
    }

    /**
     * Returns UUID of the Network function chain entity that this subnet belongs to (type VLAN only).
     * @return {string}
     */
  }, {
    key: "getNetworkFunctionChainReference",
    value: function getNetworkFunctionChainReference() {
      return this.networkFunctionChainReference;
    }

    /**
     * Sets UUID of the Network function chain entity that this subnet belongs to (type VLAN only).
     * @param {string} networkFunctionChainReference UUID of the Network function chain entity that this subnet belongs to (type VLAN only).
     */
  }, {
    key: "setNetworkFunctionChainReference",
    value: function setNetworkFunctionChainReference(networkFunctionChainReference) {
      this.networkFunctionChainReference = networkFunctionChainReference;
    }

    /**
     * Returns Name of the bridge on the host for the subnet.
     * @return {string}
     */
  }, {
    key: "getBridgeName",
    value: function getBridgeName() {
      return this.bridgeName;
    }

    /**
     * Sets Name of the bridge on the host for the subnet.
     * @param {string} bridgeName Name of the bridge on the host for the subnet.
     */
  }, {
    key: "setBridgeName",
    value: function setBridgeName(bridgeName) {
      this.bridgeName = bridgeName;
    }

    /**
     * Returns Indicates whether the subnet is used for advanced networking.
     * @return {boolean}
     */
  }, {
    key: "getIsAdvancedNetworking",
    value: function getIsAdvancedNetworking() {
      return this.isAdvancedNetworking;
    }

    /**
     * Sets Indicates whether the subnet is used for advanced networking.
     * @param {boolean} isAdvancedNetworking Indicates whether the subnet is used for advanced networking.
     */
  }, {
    key: "setIsAdvancedNetworking",
    value: function setIsAdvancedNetworking(isAdvancedNetworking) {
      this.isAdvancedNetworking = isAdvancedNetworking;
    }

    /**
     * Returns Cluster Name
     * @return {string}
     */
  }, {
    key: "getClusterName",
    value: function getClusterName() {
      return this.clusterName;
    }

    /**
     * Sets Cluster Name
     * @param {string} clusterName Cluster Name
     */
  }, {
    key: "setClusterName",
    value: function setClusterName(clusterName) {
      this.clusterName = clusterName;
    }

    /**
     * Returns Hypervisor Type
     * @return {string}
     */
  }, {
    key: "getHypervisorType",
    value: function getHypervisorType() {
      return this.hypervisorType;
    }

    /**
     * Sets Hypervisor Type
     * @param {string} hypervisorType Hypervisor Type
     */
  }, {
    key: "setHypervisorType",
    value: function setHypervisorType(hypervisorType) {
      this.hypervisorType = hypervisorType;
    }

    /**
     * @return {VirtualSwitch}
     */
  }, {
    key: "getVirtualSwitch",
    value: function getVirtualSwitch() {
      return this.virtualSwitch;
    }

    /**
     * @param {VirtualSwitch} virtualSwitch
     */
  }, {
    key: "setVirtualSwitch",
    value: function setVirtualSwitch(virtualSwitch) {
      this.virtualSwitch = virtualSwitch;
    }

    /**
     * @return {Vpc}
     */
  }, {
    key: "getVpc",
    value: function getVpc() {
      return this.vpc;
    }

    /**
     * @param {Vpc} vpc
     */
  }, {
    key: "setVpc",
    value: function setVpc(vpc) {
      this.vpc = vpc;
    }

    /**
     * Returns IP Prefix in CIDR format.
     * @return {string}
     */
  }, {
    key: "getIpPrefix",
    value: function getIpPrefix() {
      return this.ipPrefix;
    }

    /**
     * Sets IP Prefix in CIDR format.
     * @param {string} ipPrefix IP Prefix in CIDR format.
     */
  }, {
    key: "setIpPrefix",
    value: function setIpPrefix(ipPrefix) {
      this.ipPrefix = ipPrefix;
    }

    /**
     * @return {IPUsage}
     */
  }, {
    key: "getIpUsage",
    value: function getIpUsage() {
      return this.ipUsage;
    }

    /**
     * @param {IPUsage} ipUsage
     */
  }, {
    key: "setIpUsage",
    value: function setIpUsage(ipUsage) {
      this.ipUsage = ipUsage;
    }

    /**
     * @return {MigrationState}
     */
  }, {
    key: "getMigrationState",
    value: function getMigrationState() {
      return this.migrationState;
    }

    /**
     * @param {MigrationState} migrationState
     */
  }, {
    key: "setMigrationState",
    value: function setMigrationState(migrationState) {
      this.migrationState = migrationState;
    }
  }, {
    key: "toJson",
    value: function toJson(forMutation) {
      if (forMutation === false) {
        return _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({}, typeof this.getName() !== 'undefined' && this.getName() !== null ? {
          'name': this.getName()
        } : {}), typeof this.getDescription() !== 'undefined' && this.getDescription() !== null ? {
          'description': this.getDescription()
        } : {}), typeof this.getSubnetType() !== 'undefined' && this.getSubnetType() !== null ? {
          'subnetType': this.getSubnetType()
        } : {}), typeof this.getNetworkId() !== 'undefined' && this.getNetworkId() !== null ? {
          'networkId': this.getNetworkId()
        } : {}), typeof this.getDhcpOptions() !== 'undefined' && this.getDhcpOptions() !== null ? {
          'dhcpOptions': this.getDhcpOptions().toJson(false)
        } : {}), typeof this.getIpConfig() !== 'undefined' && this.getIpConfig() !== null ? {
          'ipConfig': this.getIpConfig().map(function (item) {
            return item.toJson(false);
          })
        } : {}), typeof this.getClusterReference() !== 'undefined' && this.getClusterReference() !== null ? {
          'clusterReference': this.getClusterReference()
        } : {}), typeof this.getVirtualSwitchReference() !== 'undefined' && this.getVirtualSwitchReference() !== null ? {
          'virtualSwitchReference': this.getVirtualSwitchReference()
        } : {}), typeof this.getVpcReference() !== 'undefined' && this.getVpcReference() !== null ? {
          'vpcReference': this.getVpcReference()
        } : {}), typeof this.getIsNatEnabled() !== 'undefined' && this.getIsNatEnabled() !== null ? {
          'isNatEnabled': this.getIsNatEnabled()
        } : {}), typeof this.getIsExternal() !== 'undefined' && this.getIsExternal() !== null ? {
          'isExternal': this.getIsExternal()
        } : {}), typeof this.getReservedIpAddresses() !== 'undefined' && this.getReservedIpAddresses() !== null ? {
          'reservedIpAddresses': this.getReservedIpAddresses().map(function (item) {
            return item.toJson(false);
          })
        } : {}), typeof this.getDynamicIpAddresses() !== 'undefined' && this.getDynamicIpAddresses() !== null ? {
          'dynamicIpAddresses': this.getDynamicIpAddresses().map(function (item) {
            return item.toJson(false);
          })
        } : {}), typeof this.getNetworkFunctionChainReference() !== 'undefined' && this.getNetworkFunctionChainReference() !== null ? {
          'networkFunctionChainReference': this.getNetworkFunctionChainReference()
        } : {}), typeof this.getBridgeName() !== 'undefined' && this.getBridgeName() !== null ? {
          'bridgeName': this.getBridgeName()
        } : {}), typeof this.getIsAdvancedNetworking() !== 'undefined' && this.getIsAdvancedNetworking() !== null ? {
          'isAdvancedNetworking': this.getIsAdvancedNetworking()
        } : {}), typeof this.getClusterName() !== 'undefined' && this.getClusterName() !== null ? {
          'clusterName': this.getClusterName()
        } : {}), typeof this.getHypervisorType() !== 'undefined' && this.getHypervisorType() !== null ? {
          'hypervisorType': this.getHypervisorType()
        } : {}), typeof this.getVirtualSwitch() !== 'undefined' && this.getVirtualSwitch() !== null ? {
          'virtualSwitch': this.getVirtualSwitch().toJson(false)
        } : {}), typeof this.getVpc() !== 'undefined' && this.getVpc() !== null ? {
          'vpc': this.getVpc().toJson(false)
        } : {}), typeof this.getIpPrefix() !== 'undefined' && this.getIpPrefix() !== null ? {
          'ipPrefix': this.getIpPrefix()
        } : {}), typeof this.getIpUsage() !== 'undefined' && this.getIpUsage() !== null ? {
          'ipUsage': this.getIpUsage().toJson(false)
        } : {}), typeof this.getMigrationState() !== 'undefined' && this.getMigrationState() !== null ? {
          'migrationState': this.getMigrationState()
        } : {}), typeof this.getMetadata() !== 'undefined' && this.getMetadata() !== null ? {
          'metadata': this.getMetadata().toJson(false)
        } : {}), typeof this.getExtId() !== 'undefined' && this.getExtId() !== null ? {
          'extId': this.getExtId()
        } : {}), typeof this.getLinks() !== 'undefined' && this.getLinks() !== null ? {
          'links': this.getLinks().map(function (item) {
            return item.toJson(false);
          })
        } : {}), typeof this.getTenantId() !== 'undefined' && this.getTenantId() !== null ? {
          'tenantId': this.getTenantId()
        } : {}), {}, {
          '$reserved': this.get$Reserved(),
          '$objectType': this.get$ObjectType(),
          '$unknownFields': this.get$UnknownFields()
        });
      }
      return _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({}, typeof this.getName() !== 'undefined' && this.getName() !== null ? {
        'name': this.getName()
      } : {}), typeof this.getDescription() !== 'undefined' && this.getDescription() !== null ? {
        'description': this.getDescription()
      } : {}), typeof this.getSubnetType() !== 'undefined' && this.getSubnetType() !== null ? {
        'subnetType': this.getSubnetType()
      } : {}), typeof this.getNetworkId() !== 'undefined' && this.getNetworkId() !== null ? {
        'networkId': this.getNetworkId()
      } : {}), typeof this.getDhcpOptions() !== 'undefined' && this.getDhcpOptions() !== null ? {
        'dhcpOptions': this.getDhcpOptions().toJson(false)
      } : {}), typeof this.getIpConfig() !== 'undefined' && this.getIpConfig() !== null ? {
        'ipConfig': this.getIpConfig().map(function (item) {
          return item.toJson(false);
        })
      } : {}), typeof this.getClusterReference() !== 'undefined' && this.getClusterReference() !== null ? {
        'clusterReference': this.getClusterReference()
      } : {}), typeof this.getVirtualSwitchReference() !== 'undefined' && this.getVirtualSwitchReference() !== null ? {
        'virtualSwitchReference': this.getVirtualSwitchReference()
      } : {}), typeof this.getVpcReference() !== 'undefined' && this.getVpcReference() !== null ? {
        'vpcReference': this.getVpcReference()
      } : {}), typeof this.getIsNatEnabled() !== 'undefined' && this.getIsNatEnabled() !== null ? {
        'isNatEnabled': this.getIsNatEnabled()
      } : {}), typeof this.getIsExternal() !== 'undefined' && this.getIsExternal() !== null ? {
        'isExternal': this.getIsExternal()
      } : {}), typeof this.getNetworkFunctionChainReference() !== 'undefined' && this.getNetworkFunctionChainReference() !== null ? {
        'networkFunctionChainReference': this.getNetworkFunctionChainReference()
      } : {}), typeof this.getBridgeName() !== 'undefined' && this.getBridgeName() !== null ? {
        'bridgeName': this.getBridgeName()
      } : {}), typeof this.getIsAdvancedNetworking() !== 'undefined' && this.getIsAdvancedNetworking() !== null ? {
        'isAdvancedNetworking': this.getIsAdvancedNetworking()
      } : {}), typeof this.getClusterName() !== 'undefined' && this.getClusterName() !== null ? {
        'clusterName': this.getClusterName()
      } : {}), typeof this.getHypervisorType() !== 'undefined' && this.getHypervisorType() !== null ? {
        'hypervisorType': this.getHypervisorType()
      } : {}), typeof this.getVirtualSwitch() !== 'undefined' && this.getVirtualSwitch() !== null ? {
        'virtualSwitch': this.getVirtualSwitch().toJson(false)
      } : {}), typeof this.getVpc() !== 'undefined' && this.getVpc() !== null ? {
        'vpc': this.getVpc().toJson(false)
      } : {}), typeof this.getIpPrefix() !== 'undefined' && this.getIpPrefix() !== null ? {
        'ipPrefix': this.getIpPrefix()
      } : {}), typeof this.getIpUsage() !== 'undefined' && this.getIpUsage() !== null ? {
        'ipUsage': this.getIpUsage().toJson(false)
      } : {}), typeof this.getMigrationState() !== 'undefined' && this.getMigrationState() !== null ? {
        'migrationState': this.getMigrationState()
      } : {}), typeof this.getMetadata() !== 'undefined' && this.getMetadata() !== null ? {
        'metadata': this.getMetadata().toJson(false)
      } : {}), {}, {
        '$reserved': this.get$Reserved(),
        '$objectType': this.get$ObjectType(),
        '$unknownFields': this.get$UnknownFields()
      });
    }
  }, {
    key: "validate",
    value: function validate(scope, properties) {
      var _this2 = this;
      var propList = [];
      if (arguments.length === 0 || arguments.length === 1 && arguments[0] instanceof _ValidationScopes["default"]) {
        //cases validate() and validate(scope)
        propList = [];
      } else if (arguments.length === 1) {
        //case validate(properties)
        propList = arguments[0];
        scope = null;
      } else {
        //case validate(scope, properties)
        propList = arguments[1];
      }
      var res = [];
      var err = null;
      propList.forEach(function (property) {
        err = _this2.validateProperty(property, scope);
        if (err) {
          res.push(err);
        }
      });
      return new Promise(function (resolve, reject) {
        if (res.length !== 0) {
          reject(err);
        } else {
          resolve();
        }
      });
    }
  }, {
    key: "validateProperty",
    value: function validateProperty(scope, property) {
      if (property === "name") {
        if (typeof this.name === 'undefined' || this.name === null) {
          return new _ValidationError["default"]("name", "undefined or null");
        }
        if (!_ValidationUtils["default"].validateMaxLength(this.name, 128)) {
          return new _ValidationError["default"]("name", "does not satisfy required maxLength constraint: 128");
        }
      }
      if (property === "description") {
        if (typeof this.description === 'undefined' || this.description === null) {
          return new _ValidationError["default"]("description", "undefined or null");
        }
        if (!_ValidationUtils["default"].validateMaxLength(this.description, 1000)) {
          return new _ValidationError["default"]("description", "does not satisfy required maxLength constraint: 1000");
        }
      }
      if (property === "subnetType") {
        if (typeof this.subnetType === 'undefined' || this.subnetType === null) {
          return new _ValidationError["default"]("subnetType", "undefined or null");
        }
      }
      if (property === "networkId") {
        if (typeof this.networkId === 'undefined' || this.networkId === null) {
          return new _ValidationError["default"]("networkId", "undefined or null");
        }
        if (!_ValidationUtils["default"].validateMaximum(this.networkId, 16777215)) {
          return new _ValidationError["default"]("networkId", "does not satisfy required maximum constraint: 16777215");
        }
        if (!_ValidationUtils["default"].validateMinimum(this.networkId, 0)) {
          return new _ValidationError["default"]("networkId", "does not satisfy required minimum constraint: 0");
        }
      }
      if (property === "dhcpOptions") {
        if (typeof this.dhcpOptions === 'undefined' || this.dhcpOptions === null) {
          return new _ValidationError["default"]("dhcpOptions", "undefined or null");
        }
      }
      if (property === "ipConfig") {
        if (typeof this.ipConfig === 'undefined' || this.ipConfig === null) {
          return new _ValidationError["default"]("ipConfig", "undefined or null");
        }
        if (!_ValidationUtils["default"].validateMaxItems(this.ipConfig, 1)) {
          return new _ValidationError["default"]("ipConfig", "does not satisfy required maxItems constraint: 1");
        }
      }
      if (property === "clusterReference") {
        if (typeof this.clusterReference === 'undefined' || this.clusterReference === null) {
          return new _ValidationError["default"]("clusterReference", "undefined or null");
        }
        if (!_ValidationUtils["default"].validatePattern(this.clusterReference, /^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$/)) {
          return new _ValidationError["default"]("clusterReference", "does not satisfy required pattern: /^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$/");
        }
      }
      if (property === "virtualSwitchReference") {
        if (typeof this.virtualSwitchReference === 'undefined' || this.virtualSwitchReference === null) {
          return new _ValidationError["default"]("virtualSwitchReference", "undefined or null");
        }
        if (!_ValidationUtils["default"].validatePattern(this.virtualSwitchReference, /^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$/)) {
          return new _ValidationError["default"]("virtualSwitchReference", "does not satisfy required pattern: /^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$/");
        }
      }
      if (property === "vpcReference") {
        if (typeof this.vpcReference === 'undefined' || this.vpcReference === null) {
          return new _ValidationError["default"]("vpcReference", "undefined or null");
        }
        if (!_ValidationUtils["default"].validatePattern(this.vpcReference, /^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$/)) {
          return new _ValidationError["default"]("vpcReference", "does not satisfy required pattern: /^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$/");
        }
      }
      if (property === "isNatEnabled") {
        if (typeof this.isNatEnabled === 'undefined' || this.isNatEnabled === null) {
          return new _ValidationError["default"]("isNatEnabled", "undefined or null");
        }
      }
      if (property === "isExternal") {
        if (typeof this.isExternal === 'undefined' || this.isExternal === null) {
          return new _ValidationError["default"]("isExternal", "undefined or null");
        }
      }
      if (property === "reservedIpAddresses") {
        if (typeof this.reservedIpAddresses === 'undefined' || this.reservedIpAddresses === null) {
          return new _ValidationError["default"]("reservedIpAddresses", "undefined or null");
        }
        if (!_ValidationUtils["default"].validateMaxItems(this.reservedIpAddresses, 255)) {
          return new _ValidationError["default"]("reservedIpAddresses", "does not satisfy required maxItems constraint: 255");
        }
      }
      if (property === "dynamicIpAddresses") {
        if (typeof this.dynamicIpAddresses === 'undefined' || this.dynamicIpAddresses === null) {
          return new _ValidationError["default"]("dynamicIpAddresses", "undefined or null");
        }
        if (!_ValidationUtils["default"].validateMaxItems(this.dynamicIpAddresses, 255)) {
          return new _ValidationError["default"]("dynamicIpAddresses", "does not satisfy required maxItems constraint: 255");
        }
      }
      if (property === "networkFunctionChainReference") {
        if (typeof this.networkFunctionChainReference === 'undefined' || this.networkFunctionChainReference === null) {
          return new _ValidationError["default"]("networkFunctionChainReference", "undefined or null");
        }
        if (!_ValidationUtils["default"].validatePattern(this.networkFunctionChainReference, /^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$/)) {
          return new _ValidationError["default"]("networkFunctionChainReference", "does not satisfy required pattern: /^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$/");
        }
      }
      if (property === "bridgeName") {
        if (typeof this.bridgeName === 'undefined' || this.bridgeName === null) {
          return new _ValidationError["default"]("bridgeName", "undefined or null");
        }
        if (!_ValidationUtils["default"].validateMaxLength(this.bridgeName, 128)) {
          return new _ValidationError["default"]("bridgeName", "does not satisfy required maxLength constraint: 128");
        }
      }
      if (property === "isAdvancedNetworking") {
        if (typeof this.isAdvancedNetworking === 'undefined' || this.isAdvancedNetworking === null) {
          return new _ValidationError["default"]("isAdvancedNetworking", "undefined or null");
        }
      }
      if (property === "clusterName") {
        if (typeof this.clusterName === 'undefined' || this.clusterName === null) {
          return new _ValidationError["default"]("clusterName", "undefined or null");
        }
        if (!_ValidationUtils["default"].validateMaxLength(this.clusterName, 128)) {
          return new _ValidationError["default"]("clusterName", "does not satisfy required maxLength constraint: 128");
        }
      }
      if (property === "hypervisorType") {
        if (typeof this.hypervisorType === 'undefined' || this.hypervisorType === null) {
          return new _ValidationError["default"]("hypervisorType", "undefined or null");
        }
        if (typeof scope === 'undefined' || scope === null) {}
      }
      if (property === "virtualSwitch") {
        if (typeof this.virtualSwitch === 'undefined' || this.virtualSwitch === null) {
          return new _ValidationError["default"]("virtualSwitch", "undefined or null");
        }
      }
      if (property === "vpc") {
        if (typeof this.vpc === 'undefined' || this.vpc === null) {
          return new _ValidationError["default"]("vpc", "undefined or null");
        }
      }
      if (property === "ipPrefix") {
        if (typeof this.ipPrefix === 'undefined' || this.ipPrefix === null) {
          return new _ValidationError["default"]("ipPrefix", "undefined or null");
        }
      }
      if (property === "ipUsage") {
        if (typeof this.ipUsage === 'undefined' || this.ipUsage === null) {
          return new _ValidationError["default"]("ipUsage", "undefined or null");
        }
      }
      if (property === "migrationState") {
        if (typeof this.migrationState === 'undefined' || this.migrationState === null) {
          return new _ValidationError["default"]("migrationState", "undefined or null");
        }
      }
      return new _ValidationError["default"](property, "no such property exists");
    }
  }], [{
    key: "constructFromObject",
    value: function constructFromObject(data) {
      var obj = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
      var callFromChild = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
      var items, item, i, itemArr, discriminator;
      if (data) {
        obj = obj || new Subnet();
        _NetworkingBaseModel2["default"].constructFromObject(data, obj, true);
        if (data.hasOwnProperty('name') && data.name !== null && data.name !== undefined) {
          obj.setName(data['name']);
        }
        if (data.hasOwnProperty('description') && data.description !== null && data.description !== undefined) {
          obj.setDescription(data['description']);
        }
        if (data.hasOwnProperty('subnetType') && data.subnetType !== null && data.subnetType !== undefined) {
          obj.setSubnetType(_SubnetType["default"].constructFromObject(data['subnetType']));
        }
        if (data.hasOwnProperty('networkId') && data.networkId !== null && data.networkId !== undefined) {
          obj.setNetworkId(data['networkId']);
        }
        if (data.hasOwnProperty('dhcpOptions') && data.dhcpOptions !== null && data.dhcpOptions !== undefined) {
          obj.setDhcpOptions(_DhcpOptions["default"].constructFromObject(data['dhcpOptions']));
        }
        if (data.hasOwnProperty('ipConfig') && data.ipConfig !== null && data.ipConfig !== undefined) {
          itemArr = [];
          items = data.ipConfig;
          for (i = 0; i < items.length; i++) {
            item = _IPConfig["default"].constructFromObject(items[i], undefined);
            itemArr.push(item);
          }
          obj.setIpConfig(itemArr);
        }
        if (data.hasOwnProperty('clusterReference') && data.clusterReference !== null && data.clusterReference !== undefined) {
          obj.setClusterReference(data['clusterReference']);
        }
        if (data.hasOwnProperty('virtualSwitchReference') && data.virtualSwitchReference !== null && data.virtualSwitchReference !== undefined) {
          obj.setVirtualSwitchReference(data['virtualSwitchReference']);
        }
        if (data.hasOwnProperty('vpcReference') && data.vpcReference !== null && data.vpcReference !== undefined) {
          obj.setVpcReference(data['vpcReference']);
        }
        if (data.hasOwnProperty('isNatEnabled') && data.isNatEnabled !== null && data.isNatEnabled !== undefined) {
          obj.setIsNatEnabled(data['isNatEnabled']);
        }
        if (data.hasOwnProperty('isExternal') && data.isExternal !== null && data.isExternal !== undefined) {
          obj.setIsExternal(data['isExternal']);
        }
        if (data.hasOwnProperty('reservedIpAddresses') && data.reservedIpAddresses !== null && data.reservedIpAddresses !== undefined) {
          itemArr = [];
          items = data.reservedIpAddresses;
          for (i = 0; i < items.length; i++) {
            item = _IPAddress["default"].constructFromObject(items[i], undefined);
            itemArr.push(item);
          }
          obj.setReservedIpAddresses(itemArr);
        }
        if (data.hasOwnProperty('dynamicIpAddresses') && data.dynamicIpAddresses !== null && data.dynamicIpAddresses !== undefined) {
          itemArr = [];
          items = data.dynamicIpAddresses;
          for (i = 0; i < items.length; i++) {
            item = _IPAddress["default"].constructFromObject(items[i], undefined);
            itemArr.push(item);
          }
          obj.setDynamicIpAddresses(itemArr);
        }
        if (data.hasOwnProperty('networkFunctionChainReference') && data.networkFunctionChainReference !== null && data.networkFunctionChainReference !== undefined) {
          obj.setNetworkFunctionChainReference(data['networkFunctionChainReference']);
        }
        if (data.hasOwnProperty('bridgeName') && data.bridgeName !== null && data.bridgeName !== undefined) {
          obj.setBridgeName(data['bridgeName']);
        }
        if (data.hasOwnProperty('isAdvancedNetworking') && data.isAdvancedNetworking !== null && data.isAdvancedNetworking !== undefined) {
          obj.setIsAdvancedNetworking(data['isAdvancedNetworking']);
        }
        if (data.hasOwnProperty('clusterName') && data.clusterName !== null && data.clusterName !== undefined) {
          obj.setClusterName(data['clusterName']);
        }
        if (data.hasOwnProperty('hypervisorType') && data.hypervisorType !== null && data.hypervisorType !== undefined) {
          obj.setHypervisorType(data['hypervisorType']);
        }
        if (data.hasOwnProperty('virtualSwitch') && data.virtualSwitch !== null && data.virtualSwitch !== undefined) {
          obj.setVirtualSwitch(_VirtualSwitch["default"].constructFromObject(data['virtualSwitch']));
        }
        if (data.hasOwnProperty('vpc') && data.vpc !== null && data.vpc !== undefined) {
          obj.setVpc(_Vpc["default"].constructFromObject(data['vpc']));
        }
        if (data.hasOwnProperty('ipPrefix') && data.ipPrefix !== null && data.ipPrefix !== undefined) {
          obj.setIpPrefix(data['ipPrefix']);
        }
        if (data.hasOwnProperty('ipUsage') && data.ipUsage !== null && data.ipUsage !== undefined) {
          obj.setIpUsage(_IPUsage["default"].constructFromObject(data['ipUsage']));
        }
        if (data.hasOwnProperty('migrationState') && data.migrationState !== null && data.migrationState !== undefined) {
          obj.setMigrationState(_MigrationState["default"].constructFromObject(data['migrationState']));
        }
        if (!callFromChild) {
          obj.$unknownFields = _objectSpread({}, data.$unknownFields);
          for (var property in data) {
            // Check if the `property` is not already present in `obj` keys, either in snake_case or camelCase,
            // as the model's fields are generated in camelCase, but the server might return snake_case (e.g., due to standards like OIDC).
            // Also, ensure the `property` does not start with '$' and end with 'ItemDiscriminator'.
            // If all conditions are true, add the `property` from `data` to `obj.$unknownFields` as an unknown field.
            if (!Object.keys(obj).includes(property) && !Object.keys(obj).includes(this.snakeToCamel(property)) && !(property[0] === "$" && property.endsWith("ItemDiscriminator"))) {
              obj.$unknownFields[property] = data[property];
            }
          }
        }
      }
      return obj;
    }

    /**
    * Converts a given snake_case string to camelCase.
    * @param {string} snakeStr - The input string in snake_case format.
    * @returns {string} - The converted string in camelCase format.
    */
  }, {
    key: "snakeToCamel",
    value: function snakeToCamel(snakeStr) {
      return snakeStr.replace(/(_\w)/g, function (match) {
        return match[1].toUpperCase();
      });
    }
  }]);
}(_NetworkingBaseModel2["default"]);
/**
 * Name of the subnet.
 * @memberof Subnet
 */
function _toJsonMapType(obj, forMutation) {
  if (obj instanceof Map) {
    return Object.fromEntries(Array.from(obj, function (_ref) {
      var _ref2 = _slicedToArray(_ref, 2),
        k = _ref2[0],
        v = _ref2[1];
      return [k, typeof v.toJson !== "undefined" ? v.toJson(forMutation) : v];
    }));
  } else if (_typeof(obj) === 'object' && obj != null && obj.constructor === Object) {
    return Object.fromEntries(Array.from(Object.entries(obj), function (entry) {
      return [entry[0], typeof entry[1].toJson !== "undefined" ? entry[1].toJson(forMutation) : entry[1]];
    }));
  }
  return obj;
}
/*
* toJson method for a date type which serializes a Date object to proper Date or DateTime formatting
* @param {Object} obj Object to serialize
* @param {boolean} isDateOnly Boolean variable to identify Date or DateTime format for serialization
* @returns {Object|string} Returns serialized date object or original input object
*/
function _handleDateType(obj, isDateOnly) {
  if (obj instanceof Date && isDateOnly !== undefined) {
    return isDateOnly ? obj.toISOString().slice(0, 10) : obj.toISOString();
  }
  return obj;
}
Subnet.prototype.name = undefined;

/**
 * Description of the subnet.
 * @memberof Subnet
 */
Subnet.prototype.description = undefined;

/**
 * @memberof Subnet
 */
Subnet.prototype.subnetType = undefined;

/**
 * For VLAN subnet, this field represents VLAN Id, valid range is from 0 to 4095; For overlay subnet, this field represents 24-bit VNI, this field is read-only.
 * @memberof Subnet
 */
Subnet.prototype.networkId = undefined;

/**
 * @memberof Subnet
 */
Subnet.prototype.dhcpOptions = undefined;

/**
 * IP configuration for the subnet.
 * @memberof Subnet
 */
Subnet.prototype.ipConfig = undefined;

/**
 * UUID of the cluster this subnet belongs to.
 * @memberof Subnet
 */
Subnet.prototype.clusterReference = undefined;

/**
 * UUID of the virtual switch this subnet belongs to (type VLAN only).
 * @memberof Subnet
 */
Subnet.prototype.virtualSwitchReference = undefined;

/**
 * UUID of Virtual Private Cloud this subnet belongs to (type Overlay only).
 * @memberof Subnet
 */
Subnet.prototype.vpcReference = undefined;

/**
 * Indicates whether NAT must be enabled for VPCs attached to the subnet. This is supported only for external subnets. NAT is enabled by default on external subnets.
 * @memberof Subnet
 */
Subnet.prototype.isNatEnabled = undefined;

/**
 * Indicates whether the subnet is used for external connectivity.
 * @memberof Subnet
 */
Subnet.prototype.isExternal = undefined;

/**
 * List of IPs that are excluded while allocating IP addresses to VM ports.
 * @memberof Subnet
 */
Subnet.prototype.reservedIpAddresses = undefined;

/**
 * List of IPs, which are a subset from the reserved IP address list, that must be advertised to the SDN gateway.
 * @memberof Subnet
 */
Subnet.prototype.dynamicIpAddresses = undefined;

/**
 * UUID of the Network function chain entity that this subnet belongs to (type VLAN only).
 * @memberof Subnet
 */
Subnet.prototype.networkFunctionChainReference = undefined;

/**
 * Name of the bridge on the host for the subnet.
 * @memberof Subnet
 */
Subnet.prototype.bridgeName = undefined;

/**
 * Indicates whether the subnet is used for advanced networking.
 * @memberof Subnet
 */
Subnet.prototype.isAdvancedNetworking = undefined;

/**
 * Cluster Name
 * @memberof Subnet
 */
Subnet.prototype.clusterName = undefined;

/**
 * Hypervisor Type
 * @memberof Subnet
 */
Subnet.prototype.hypervisorType = undefined;

/**
 * @memberof Subnet
 */
Subnet.prototype.virtualSwitch = undefined;

/**
 * @memberof Subnet
 */
Subnet.prototype.vpc = undefined;

/**
 * IP Prefix in CIDR format.
 * @memberof Subnet
 */
Subnet.prototype.ipPrefix = undefined;

/**
 * @memberof Subnet
 */
Subnet.prototype.ipUsage = undefined;

/**
 * @memberof Subnet
 */
Subnet.prototype.migrationState = undefined;

/**
  * @memberof Subnet
  */
_NetworkingBaseModel2["default"].prototype.metadata = undefined;
/**
  * A globally unique identifier of an instance that is suitable for external consumption. 
  * @memberof Subnet
  */
_ExternalizableAbstractModel["default"].prototype.extId = undefined;
/**
  * A HATEOAS style link for the response.  Each link contains a user-friendly name identifying the link and an address for retrieving the particular resource. 
  * @memberof Subnet
  */
_ExternalizableAbstractModel["default"].prototype.links = undefined;
/**
  * A globally unique identifier that represents the tenant that owns this entity. The system automatically assigns it, and it and is immutable from an API consumer perspective (some use cases may cause this Id to change - For instance, a use case may require the transfer of ownership of the entity, but these cases are handled automatically on the server). 
  * @memberof Subnet
  */
_TenantAwareModel["default"].prototype.tenantId = undefined;
// Implement OneOfnetworking.v4.config.GetSubnetApiResponsedata interface: