"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports["default"] = void 0;
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 _NetworkingBaseModel2 = _interopRequireDefault(require("./NetworkingBaseModel"));
var _RemoteVtepStretchStatus = _interopRequireDefault(require("./RemoteVtepStretchStatus"));
var _SiteParams = _interopRequireDefault(require("./SiteParams"));
var _StretchConnectionType = _interopRequireDefault(require("./StretchConnectionType"));
var _StretchStatus = _interopRequireDefault(require("./StretchStatus"));
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 Layer2Stretch model module.
 * @module Ntnx/Layer2Stretch
 * @version 4.0.1
 * @class Layer2Stretch
 * @extends NetworkingBaseModel
 * 
 * @param { string } name Layer2 stretch configuration name.
 */
var _Layer2Stretch_brand = /*#__PURE__*/new WeakSet();
var Layer2Stretch = exports["default"] = /*#__PURE__*/function (_NetworkingBaseModel) {
  /**
   * Constructs a new <code>Layer2Stretch</code>.
   * @alias module:Ntnx/Layer2Stretch
   * @extends module:Ntnx/NetworkingBaseModel
   * 
   * @param { string } name Layer2 stretch configuration name.
  */
  function Layer2Stretch(name) {
    var _this;
    _classCallCheck(this, Layer2Stretch);
    _this = _callSuper(this, Layer2Stretch);
    /*
    * 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, _Layer2Stretch_brand);
    _this.name = name;
    _this.$objectType = "networking.v4.config.Layer2Stretch";
    /** @type {object<string, any>} */
    _this.$reserved = {
      '$fv': "v4.r0"
    };
    /** @type {object<string, any>} */
    _this.$unknownFields = {};
    return _this;
  }

  /**
   * Constructs a <code>Layer2Stretch</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/Layer2Stretch} obj Optional instance to populate.
   * @param callFromChild {Boolean} Flag to recognise calling instance
   * @return {module:Ntnx/Layer2Stretch} The populated <code>Layer2Stretch</code> instance.
   */
  _inherits(Layer2Stretch, _NetworkingBaseModel);
  return _createClass(Layer2Stretch, [{
    key: "getName",
    value:
    /**
     * Returns Layer2 stretch configuration name.
     * @return {string}
     */
    function getName() {
      return this.name;
    }

    /**
     * Sets Layer2 stretch configuration name.
     * @param {string} name Layer2 stretch configuration name.
     */
  }, {
    key: "setName",
    value: function setName(name) {
      this.name = name;
    }

    /**
     * Returns Layer2 stretch configuration details between subnets on two sites.
     * @return {string}
     */
  }, {
    key: "getDescription",
    value: function getDescription() {
      return this.description;
    }

    /**
     * Sets Layer2 stretch configuration details between subnets on two sites.
     * @param {string} description Layer2 stretch configuration details between subnets on two sites.
     */
  }, {
    key: "setDescription",
    value: function setDescription(description) {
      this.description = description;
    }

    /**
     * @return {SiteParams}
     */
  }, {
    key: "getLocalSiteParams",
    value: function getLocalSiteParams() {
      return this.localSiteParams;
    }

    /**
     * @param {SiteParams} localSiteParams
     */
  }, {
    key: "setLocalSiteParams",
    value: function setLocalSiteParams(localSiteParams) {
      this.localSiteParams = localSiteParams;
    }

    /**
     * @return {SiteParams}
     */
  }, {
    key: "getRemoteSiteParams",
    value: function getRemoteSiteParams() {
      return this.remoteSiteParams;
    }

    /**
     * @param {SiteParams} remoteSiteParams
     */
  }, {
    key: "setRemoteSiteParams",
    value: function setRemoteSiteParams(remoteSiteParams) {
      this.remoteSiteParams = remoteSiteParams;
    }

    /**
     * @return {StretchConnectionType}
     */
  }, {
    key: "getConnectionType",
    value: function getConnectionType() {
      return this.connectionType;
    }

    /**
     * @param {StretchConnectionType} connectionType
     */
  }, {
    key: "setConnectionType",
    value: function setConnectionType(connectionType) {
      this.connectionType = connectionType;
    }

    /**
     * @return {StretchStatus}
     */
  }, {
    key: "getStretchStatus",
    value: function getStretchStatus() {
      return this.stretchStatus;
    }

    /**
     * @param {StretchStatus} stretchStatus
     */
  }, {
    key: "setStretchStatus",
    value: function setStretchStatus(stretchStatus) {
      this.stretchStatus = stretchStatus;
    }

    /**
     * @return {RemoteVtepStretchStatus[]}
     */
  }, {
    key: "getRemoteStretchStatus",
    value: function getRemoteStretchStatus() {
      return this.remoteStretchStatus;
    }

    /**
     * @param {RemoteVtepStretchStatus[]} remoteStretchStatus
     */
  }, {
    key: "setRemoteStretchStatus",
    value: function setRemoteStretchStatus(remoteStretchStatus) {
      this.remoteStretchStatus = remoteStretchStatus;
    }

    /**
     * Returns The MTU size setting for the VXLAN session.
     * minimum: 500
     * maximum: 8950
     * @return {Number}
     */
  }, {
    key: "getMtu",
    value: function getMtu() {
      return this.mtu;
    }

    /**
     * Sets The MTU size setting for the VXLAN session.
     * @param {Number} mtu The MTU size setting for the VXLAN session.
     */
  }, {
    key: "setMtu",
    value: function setMtu(mtu) {
      this.mtu = mtu;
    }

    /**
     * Returns The VXLAN network identifier used to uniquely identify the VXLAN tunnel.
     * minimum: 1
     * maximum: 16777215
     * @return {Number}
     */
  }, {
    key: "getVni",
    value: function getVni() {
      return this.vni;
    }

    /**
     * Sets The VXLAN network identifier used to uniquely identify the VXLAN tunnel.
     * @param {Number} vni The VXLAN network identifier used to uniquely identify the VXLAN tunnel.
     */
  }, {
    key: "setVni",
    value: function setVni(vni) {
      this.vni = vni;
    }
  }, {
    key: "toJson",
    value: function toJson(forMutation) {
      if (forMutation === false) {
        return _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.getLocalSiteParams() !== 'undefined' && this.getLocalSiteParams() !== null ? {
          'localSiteParams': this.getLocalSiteParams().toJson(false)
        } : {}), typeof this.getRemoteSiteParams() !== 'undefined' && this.getRemoteSiteParams() !== null ? {
          'remoteSiteParams': this.getRemoteSiteParams().toJson(false)
        } : {}), typeof this.getConnectionType() !== 'undefined' && this.getConnectionType() !== null ? {
          'connectionType': this.getConnectionType()
        } : {}), typeof this.getStretchStatus() !== 'undefined' && this.getStretchStatus() !== null ? {
          'stretchStatus': this.getStretchStatus().toJson(false)
        } : {}), typeof this.getRemoteStretchStatus() !== 'undefined' && this.getRemoteStretchStatus() !== null ? {
          'remoteStretchStatus': this.getRemoteStretchStatus().map(function (item) {
            return item.toJson(false);
          })
        } : {}), typeof this.getMtu() !== 'undefined' && this.getMtu() !== null ? {
          'mtu': this.getMtu()
        } : {}), typeof this.getVni() !== 'undefined' && this.getVni() !== null ? {
          'vni': this.getVni()
        } : {}), 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({}, typeof this.getName() !== 'undefined' && this.getName() !== null ? {
        'name': this.getName()
      } : {}), typeof this.getDescription() !== 'undefined' && this.getDescription() !== null ? {
        'description': this.getDescription()
      } : {}), typeof this.getLocalSiteParams() !== 'undefined' && this.getLocalSiteParams() !== null ? {
        'localSiteParams': this.getLocalSiteParams().toJson(false)
      } : {}), typeof this.getRemoteSiteParams() !== 'undefined' && this.getRemoteSiteParams() !== null ? {
        'remoteSiteParams': this.getRemoteSiteParams().toJson(false)
      } : {}), typeof this.getConnectionType() !== 'undefined' && this.getConnectionType() !== null ? {
        'connectionType': this.getConnectionType()
      } : {}), typeof this.getStretchStatus() !== 'undefined' && this.getStretchStatus() !== null ? {
        'stretchStatus': this.getStretchStatus().toJson(false)
      } : {}), typeof this.getMtu() !== 'undefined' && this.getMtu() !== null ? {
        'mtu': this.getMtu()
      } : {}), typeof this.getVni() !== 'undefined' && this.getVni() !== null ? {
        'vni': this.getVni()
      } : {}), 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 = ["name"];
      } 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 === "localSiteParams") {
        if (typeof this.localSiteParams === 'undefined' || this.localSiteParams === null) {
          return new _ValidationError["default"]("localSiteParams", "undefined or null");
        }
      }
      if (property === "remoteSiteParams") {
        if (typeof this.remoteSiteParams === 'undefined' || this.remoteSiteParams === null) {
          return new _ValidationError["default"]("remoteSiteParams", "undefined or null");
        }
      }
      if (property === "connectionType") {
        if (typeof this.connectionType === 'undefined' || this.connectionType === null) {
          return new _ValidationError["default"]("connectionType", "undefined or null");
        }
      }
      if (property === "stretchStatus") {
        if (typeof this.stretchStatus === 'undefined' || this.stretchStatus === null) {
          return new _ValidationError["default"]("stretchStatus", "undefined or null");
        }
      }
      if (property === "remoteStretchStatus") {
        if (typeof this.remoteStretchStatus === 'undefined' || this.remoteStretchStatus === null) {
          return new _ValidationError["default"]("remoteStretchStatus", "undefined or null");
        }
        if (!_ValidationUtils["default"].validateMaxItems(this.remoteStretchStatus, 10)) {
          return new _ValidationError["default"]("remoteStretchStatus", "does not satisfy required maxItems constraint: 10");
        }
      }
      if (property === "mtu") {
        if (typeof this.mtu === 'undefined' || this.mtu === null) {
          return new _ValidationError["default"]("mtu", "undefined or null");
        }
        if (!_ValidationUtils["default"].validateMaximum(this.mtu, 8950)) {
          return new _ValidationError["default"]("mtu", "does not satisfy required maximum constraint: 8950");
        }
        if (!_ValidationUtils["default"].validateMinimum(this.mtu, 500)) {
          return new _ValidationError["default"]("mtu", "does not satisfy required minimum constraint: 500");
        }
      }
      if (property === "vni") {
        if (typeof this.vni === 'undefined' || this.vni === null) {
          return new _ValidationError["default"]("vni", "undefined or null");
        }
        if (!_ValidationUtils["default"].validateMaximum(this.vni, 16777215)) {
          return new _ValidationError["default"]("vni", "does not satisfy required maximum constraint: 16777215");
        }
        if (!_ValidationUtils["default"].validateMinimum(this.vni, 1)) {
          return new _ValidationError["default"]("vni", "does not satisfy required minimum constraint: 1");
        }
      }
      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 Layer2Stretch();
        _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('localSiteParams') && data.localSiteParams !== null && data.localSiteParams !== undefined) {
          obj.setLocalSiteParams(_SiteParams["default"].constructFromObject(data['localSiteParams']));
        }
        if (data.hasOwnProperty('remoteSiteParams') && data.remoteSiteParams !== null && data.remoteSiteParams !== undefined) {
          obj.setRemoteSiteParams(_SiteParams["default"].constructFromObject(data['remoteSiteParams']));
        }
        if (data.hasOwnProperty('connectionType') && data.connectionType !== null && data.connectionType !== undefined) {
          obj.setConnectionType(_StretchConnectionType["default"].constructFromObject(data['connectionType']));
        }
        if (data.hasOwnProperty('stretchStatus') && data.stretchStatus !== null && data.stretchStatus !== undefined) {
          obj.setStretchStatus(_StretchStatus["default"].constructFromObject(data['stretchStatus']));
        }
        if (data.hasOwnProperty('remoteStretchStatus') && data.remoteStretchStatus !== null && data.remoteStretchStatus !== undefined) {
          itemArr = [];
          items = data.remoteStretchStatus;
          for (i = 0; i < items.length; i++) {
            item = _RemoteVtepStretchStatus["default"].constructFromObject(items[i], undefined);
            itemArr.push(item);
          }
          obj.setRemoteStretchStatus(itemArr);
        }
        if (data.hasOwnProperty('mtu') && data.mtu !== null && data.mtu !== undefined) {
          obj.setMtu(data['mtu']);
        }
        if (data.hasOwnProperty('vni') && data.vni !== null && data.vni !== undefined) {
          obj.setVni(data['vni']);
        }
        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"]);
/**
 * Layer2 stretch configuration name.
 * @memberof Layer2Stretch
 */
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;
}
Layer2Stretch.prototype.name = undefined;

/**
 * Layer2 stretch configuration details between subnets on two sites.
 * @memberof Layer2Stretch
 */
Layer2Stretch.prototype.description = undefined;

/**
 * @memberof Layer2Stretch
 */
Layer2Stretch.prototype.localSiteParams = undefined;

/**
 * @memberof Layer2Stretch
 */
Layer2Stretch.prototype.remoteSiteParams = undefined;

/**
 * @memberof Layer2Stretch
 */
Layer2Stretch.prototype.connectionType = undefined;

/**
 * @memberof Layer2Stretch
 */
Layer2Stretch.prototype.stretchStatus = undefined;

/**
 * @memberof Layer2Stretch
 */
Layer2Stretch.prototype.remoteStretchStatus = undefined;

/**
 * The MTU size setting for the VXLAN session.
 * @memberof Layer2Stretch
 */
Layer2Stretch.prototype.mtu = undefined;

/**
 * The VXLAN network identifier used to uniquely identify the VXLAN tunnel.
 * @memberof Layer2Stretch
 */
Layer2Stretch.prototype.vni = undefined;

/**
  * @memberof Layer2Stretch
  */
_NetworkingBaseModel2["default"].prototype.metadata = undefined;
/**
  * A globally unique identifier of an instance that is suitable for external consumption. 
  * @memberof Layer2Stretch
  */
_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 Layer2Stretch
  */
_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 Layer2Stretch
  */
_TenantAwareModel["default"].prototype.tenantId = undefined;
// Implement OneOfnetworking.v4.config.GetLayer2StretchApiResponsedata interface: