text: /**
   * NSSF NS Selection
   * NSSF Network Slice Selection Service. © 2021, 3GPP Organizational Partners
   * (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). All rights reserved.
   *
   * The version of the OpenAPI document: 2.1.2
   *
   *
   * NOTE: This class is auto generated by OpenAPI Generator
   * (https://openapi-generator.tech). https://openapi-generator.tech Do not edit
   * the class manually.
   */
  
  #include "AllowedSnssai.h"
  #include "Helpers.h"
  
  #include <sstream>
  
  namespace oai {
  namespace nssf_server {
  namespace model {
  
  AllowedSnssai::AllowedSnssai() {
    m_NsiInformationListIsSet = false;
    m_MappedHomeSnssaiIsSet   = false;
  }
  
  void AllowedSnssai::validate() const {
    std::stringstream msg;
    // if (!validate(msg))
    // {
    //     throw oai::nssf_server::helpers::ValidationException(msg.str());
    // }
  }
  
  bool AllowedSnssai::validate(std::stringstream& msg) const {
    return validate(msg, "");
  }
  
  bool AllowedSnssai::validate(
      std::stringstream& msg, const std::string& pathPrefix) const {
    bool success = true;
    const std::string _pathPrefix =
        pathPrefix.empty() ? "AllowedSnssai" : pathPrefix;
  
    if (nsiInformationListIsSet()) {
      const std::vector<NsiInformation>& value = m_NsiInformationList;
      const std::string currentValuePath = _pathPrefix + ".nsiInformationList";
  
      if (value.size() < 1) {
        success = false;
        msg << currentValuePath << ": must have at least 1 elements;";
      }
      {  // Recursive validation of array elements
        const std::string oldValuePath = currentValuePath;
        int i                          = 0;
        for (const NsiInformation& value : value) {
          const std::string currentValuePath =
              oldValuePath + "[" + std::to_string(i) + "]";
  
          success =
              value.validate(msg, currentValuePath + ".nsiInformationList") &&
              success;
  
          i++;
        }
      }
    }
  
    return success;
  }
  
  bool AllowedSnssai::operator==(const AllowedSnssai& rhs) const {
    return
  
        (getAllowedSnssai() == rhs.getAllowedSnssai()) &&
  
        ((!nsiInformationListIsSet() && !rhs.nsiInformationListIsSet()) ||
         (nsiInformationListIsSet() && rhs.nsiInformationListIsSet() &&
          getNsiInformationList() == rhs.getNsiInformationList())) &&
  
        ((!mappedHomeSnssaiIsSet() && !rhs.mappedHomeSnssaiIsSet()) ||
         (mappedHomeSnssaiIsSet() && rhs.mappedHomeSnssaiIsSet() &&
          getMappedHomeSnssai() == rhs.getMappedHomeSnssai()))
  
            ;
  }
  
  bool AllowedSnssai::operator!=(const AllowedSnssai& rhs) const {
    return !(*this == rhs);
  }
  
  void to_json(nlohmann::json& j, const AllowedSnssai& o) {
    j                  = nlohmann::json();
    j["allowedSnssai"] = o.m_AllowedSnssai;
    if (o.nsiInformationListIsSet() || !o.m_NsiInformationList.empty())
      j["nsiInformationList"] = o.m_NsiInformationList;
    if (o.mappedHomeSnssaiIsSet()) j["mappedHomeSnssai"] = o.m_MappedHomeSnssai;
  }
  
  void from_json(const nlohmann::json& j, AllowedSnssai& o) {
    j.at("allowedSnssai").get_to(o.m_AllowedSnssai);
    if (j.find("nsiInformationList") != j.end()) {
      j.at("nsiInformationList").get_to(o.m_NsiInformationList);
      o.m_NsiInformationListIsSet = true;
    }
    if (j.find("mappedHomeSnssai") != j.end()) {
      j.at("mappedHomeSnssai").get_to(o.m_MappedHomeSnssai);
      o.m_MappedHomeSnssaiIsSet = true;
    }
  }
  
  Snssai AllowedSnssai::getAllowedSnssai() const {
    return m_AllowedSnssai;
  }
  void AllowedSnssai::setAllowedSnssai(Snssai const& value) {
    m_AllowedSnssai = value;
  }
  std::vector<NsiInformation> AllowedSnssai::getNsiInformationList() const {
    return m_NsiInformationList;
  }
  void AllowedSnssai::setNsiInformationList(
      std::vector<NsiInformation> const& value) {
    m_NsiInformationList      = value;
    m_NsiInformationListIsSet = true;
  }
  bool AllowedSnssai::nsiInformationListIsSet() const {
    return m_NsiInformationListIsSet;
  }
  void AllowedSnssai::unsetNsiInformationList() {
    m_NsiInformationListIsSet = false;
  }
  Snssai AllowedSnssai::getMappedHomeSnssai() const {
    return m_MappedHomeSnssai;
  }
  void AllowedSnssai::setMappedHomeSnssai(Snssai const& value) {
    m_MappedHomeSnssai      = value;
    m_MappedHomeSnssaiIsSet = true;
  }
  bool AllowedSnssai::mappedHomeSnssaiIsSet() const {
    return m_MappedHomeSnssaiIsSet;
  }
  void AllowedSnssai::unsetMappedHomeSnssai() {
    m_MappedHomeSnssaiIsSet = false;
  }
  
  }  // namespace model
  }  // namespace nssf_server
  }  // namespace oai
  