/**
* Nudsf_DataRepository
* Nudsf Data Repository Service. © 2021, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). All rights reserved. 
*
* The version of the OpenAPI document: 1.1.0-alpha.2
* 
*
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
/*
 * AccessTokenReq.h
 *
 * Contains information related to the access token request
 */

#ifndef AccessTokenReq_H_
#define AccessTokenReq_H_


#include "NFType.h"
#include "PlmnIdNid.h"
#include <string>
#include "PlmnId.h"
#include "Snssai.h"
#include <vector>
#include <nlohmann/json.hpp>

namespace org {
namespace openapitools {
namespace server {
namespace model {

/// <summary>
/// Contains information related to the access token request
/// </summary>
class  AccessTokenReq
{
public:
    AccessTokenReq();
    virtual ~AccessTokenReq();

    void validate();

    /////////////////////////////////////////////
    /// AccessTokenReq members

    /// <summary>
    /// 
    /// </summary>
    std::string getGrantType() const;
    void setGrantType(std::string const& value);
    /// <summary>
    /// 
    /// </summary>
    std::string getNfInstanceId() const;
    void setNfInstanceId(std::string const& value);
    /// <summary>
    /// 
    /// </summary>
    NFType getNfType() const;
    void setNfType(NFType const& value);
    bool nfTypeIsSet() const;
    void unsetNfType();
    /// <summary>
    /// 
    /// </summary>
    NFType getTargetNfType() const;
    void setTargetNfType(NFType const& value);
    bool targetNfTypeIsSet() const;
    void unsetTargetNfType();
    /// <summary>
    /// 
    /// </summary>
    std::string getScope() const;
    void setScope(std::string const& value);
    /// <summary>
    /// 
    /// </summary>
    std::string getTargetNfInstanceId() const;
    void setTargetNfInstanceId(std::string const& value);
    bool targetNfInstanceIdIsSet() const;
    void unsetTargetNfInstanceId();
    /// <summary>
    /// 
    /// </summary>
    PlmnId getRequesterPlmn() const;
    void setRequesterPlmn(PlmnId const& value);
    bool requesterPlmnIsSet() const;
    void unsetRequesterPlmn();
    /// <summary>
    /// 
    /// </summary>
    std::vector<PlmnId>& getRequesterPlmnList();
    void setRequesterPlmnList(std::vector<PlmnId> const& value);
    bool requesterPlmnListIsSet() const;
    void unsetRequesterPlmnList();
    /// <summary>
    /// 
    /// </summary>
    std::vector<Snssai>& getRequesterSnssaiList();
    void setRequesterSnssaiList(std::vector<Snssai> const& value);
    bool requesterSnssaiListIsSet() const;
    void unsetRequesterSnssaiList();
    /// <summary>
    /// Fully Qualified Domain Name
    /// </summary>
    std::string getRequesterFqdn() const;
    void setRequesterFqdn(std::string const& value);
    bool requesterFqdnIsSet() const;
    void unsetRequesterFqdn();
    /// <summary>
    /// 
    /// </summary>
    std::vector<PlmnIdNid>& getRequesterSnpnList();
    void setRequesterSnpnList(std::vector<PlmnIdNid> const& value);
    bool requesterSnpnListIsSet() const;
    void unsetRequesterSnpnList();
    /// <summary>
    /// 
    /// </summary>
    PlmnId getTargetPlmn() const;
    void setTargetPlmn(PlmnId const& value);
    bool targetPlmnIsSet() const;
    void unsetTargetPlmn();
    /// <summary>
    /// 
    /// </summary>
    std::vector<Snssai>& getTargetSnssaiList();
    void setTargetSnssaiList(std::vector<Snssai> const& value);
    bool targetSnssaiListIsSet() const;
    void unsetTargetSnssaiList();
    /// <summary>
    /// 
    /// </summary>
    std::vector<std::string>& getTargetNsiList();
    void setTargetNsiList(std::vector<std::string> const& value);
    bool targetNsiListIsSet() const;
    void unsetTargetNsiList();
    /// <summary>
    /// 
    /// </summary>
    std::string getTargetNfSetId() const;
    void setTargetNfSetId(std::string const& value);
    bool targetNfSetIdIsSet() const;
    void unsetTargetNfSetId();
    /// <summary>
    /// 
    /// </summary>
    std::string getTargetNfServiceSetId() const;
    void setTargetNfServiceSetId(std::string const& value);
    bool targetNfServiceSetIdIsSet() const;
    void unsetTargetNfServiceSetId();
    /// <summary>
    /// 
    /// </summary>
    std::string getHnrfAccessTokenUri() const;
    void setHnrfAccessTokenUri(std::string const& value);
    bool hnrfAccessTokenUriIsSet() const;
    void unsetHnrfAccessTokenUri();

    friend void to_json(nlohmann::json& j, const AccessTokenReq& o);
    friend void from_json(const nlohmann::json& j, AccessTokenReq& o);
protected:
    std::string m_Grant_type;

    std::string m_NfInstanceId;

    NFType m_NfType;
    bool m_NfTypeIsSet;
    NFType m_TargetNfType;
    bool m_TargetNfTypeIsSet;
    std::string m_Scope;

    std::string m_TargetNfInstanceId;
    bool m_TargetNfInstanceIdIsSet;
    PlmnId m_RequesterPlmn;
    bool m_RequesterPlmnIsSet;
    std::vector<PlmnId> m_RequesterPlmnList;
    bool m_RequesterPlmnListIsSet;
    std::vector<Snssai> m_RequesterSnssaiList;
    bool m_RequesterSnssaiListIsSet;
    std::string m_RequesterFqdn;
    bool m_RequesterFqdnIsSet;
    std::vector<PlmnIdNid> m_RequesterSnpnList;
    bool m_RequesterSnpnListIsSet;
    PlmnId m_TargetPlmn;
    bool m_TargetPlmnIsSet;
    std::vector<Snssai> m_TargetSnssaiList;
    bool m_TargetSnssaiListIsSet;
    std::vector<std::string> m_TargetNsiList;
    bool m_TargetNsiListIsSet;
    std::string m_TargetNfSetId;
    bool m_TargetNfSetIdIsSet;
    std::string m_TargetNfServiceSetId;
    bool m_TargetNfServiceSetIdIsSet;
    std::string m_HnrfAccessTokenUri;
    bool m_HnrfAccessTokenUriIsSet;
};

}
}
}
}

#endif /* AccessTokenReq_H_ */
