/**
 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
 * SPDX-License-Identifier: Apache-2.0.
 */

#pragma once
#include <aws/grafana/ManagedGrafana_EXPORTS.h>
#include <aws/grafana/model/AccountAccessType.h>
#include <aws/grafana/model/AuthenticationSummary.h>
#include <aws/core/utils/DateTime.h>
#include <aws/core/utils/memory/stl/AWSVector.h>
#include <aws/core/utils/memory/stl/AWSString.h>
#include <aws/grafana/model/LicenseType.h>
#include <aws/grafana/model/NetworkAccessConfiguration.h>
#include <aws/grafana/model/PermissionType.h>
#include <aws/grafana/model/WorkspaceStatus.h>
#include <aws/core/utils/memory/stl/AWSMap.h>
#include <aws/grafana/model/VpcConfiguration.h>
#include <aws/grafana/model/DataSourceType.h>
#include <aws/grafana/model/NotificationDestinationType.h>
#include <utility>

namespace Aws
{
namespace Utils
{
namespace Json
{
  class JsonValue;
  class JsonView;
} // namespace Json
} // namespace Utils
namespace ManagedGrafana
{
namespace Model
{

  /**
   * <p>A structure containing information about an Amazon Managed Grafana workspace
   * in your account.</p><p><h3>See Also:</h3>   <a
   * href="http://docs.aws.amazon.com/goto/WebAPI/grafana-2020-08-18/WorkspaceDescription">AWS
   * API Reference</a></p>
   */
  class WorkspaceDescription
  {
  public:
    AWS_MANAGEDGRAFANA_API WorkspaceDescription();
    AWS_MANAGEDGRAFANA_API WorkspaceDescription(Aws::Utils::Json::JsonView jsonValue);
    AWS_MANAGEDGRAFANA_API WorkspaceDescription& operator=(Aws::Utils::Json::JsonView jsonValue);
    AWS_MANAGEDGRAFANA_API Aws::Utils::Json::JsonValue Jsonize() const;


    /**
     * <p>Specifies whether the workspace can access Amazon Web Services resources in
     * this Amazon Web Services account only, or whether it can also access Amazon Web
     * Services resources in other accounts in the same organization. If this is
     * <code>ORGANIZATION</code>, the <code>workspaceOrganizationalUnits</code>
     * parameter specifies which organizational units the workspace can access.</p>
     */
    inline const AccountAccessType& GetAccountAccessType() const{ return m_accountAccessType; }

    /**
     * <p>Specifies whether the workspace can access Amazon Web Services resources in
     * this Amazon Web Services account only, or whether it can also access Amazon Web
     * Services resources in other accounts in the same organization. If this is
     * <code>ORGANIZATION</code>, the <code>workspaceOrganizationalUnits</code>
     * parameter specifies which organizational units the workspace can access.</p>
     */
    inline bool AccountAccessTypeHasBeenSet() const { return m_accountAccessTypeHasBeenSet; }

    /**
     * <p>Specifies whether the workspace can access Amazon Web Services resources in
     * this Amazon Web Services account only, or whether it can also access Amazon Web
     * Services resources in other accounts in the same organization. If this is
     * <code>ORGANIZATION</code>, the <code>workspaceOrganizationalUnits</code>
     * parameter specifies which organizational units the workspace can access.</p>
     */
    inline void SetAccountAccessType(const AccountAccessType& value) { m_accountAccessTypeHasBeenSet = true; m_accountAccessType = value; }

    /**
     * <p>Specifies whether the workspace can access Amazon Web Services resources in
     * this Amazon Web Services account only, or whether it can also access Amazon Web
     * Services resources in other accounts in the same organization. If this is
     * <code>ORGANIZATION</code>, the <code>workspaceOrganizationalUnits</code>
     * parameter specifies which organizational units the workspace can access.</p>
     */
    inline void SetAccountAccessType(AccountAccessType&& value) { m_accountAccessTypeHasBeenSet = true; m_accountAccessType = std::move(value); }

    /**
     * <p>Specifies whether the workspace can access Amazon Web Services resources in
     * this Amazon Web Services account only, or whether it can also access Amazon Web
     * Services resources in other accounts in the same organization. If this is
     * <code>ORGANIZATION</code>, the <code>workspaceOrganizationalUnits</code>
     * parameter specifies which organizational units the workspace can access.</p>
     */
    inline WorkspaceDescription& WithAccountAccessType(const AccountAccessType& value) { SetAccountAccessType(value); return *this;}

    /**
     * <p>Specifies whether the workspace can access Amazon Web Services resources in
     * this Amazon Web Services account only, or whether it can also access Amazon Web
     * Services resources in other accounts in the same organization. If this is
     * <code>ORGANIZATION</code>, the <code>workspaceOrganizationalUnits</code>
     * parameter specifies which organizational units the workspace can access.</p>
     */
    inline WorkspaceDescription& WithAccountAccessType(AccountAccessType&& value) { SetAccountAccessType(std::move(value)); return *this;}


    /**
     * <p>A structure that describes whether the workspace uses SAML, IAM Identity
     * Center, or both methods for user authentication.</p>
     */
    inline const AuthenticationSummary& GetAuthentication() const{ return m_authentication; }

    /**
     * <p>A structure that describes whether the workspace uses SAML, IAM Identity
     * Center, or both methods for user authentication.</p>
     */
    inline bool AuthenticationHasBeenSet() const { return m_authenticationHasBeenSet; }

    /**
     * <p>A structure that describes whether the workspace uses SAML, IAM Identity
     * Center, or both methods for user authentication.</p>
     */
    inline void SetAuthentication(const AuthenticationSummary& value) { m_authenticationHasBeenSet = true; m_authentication = value; }

    /**
     * <p>A structure that describes whether the workspace uses SAML, IAM Identity
     * Center, or both methods for user authentication.</p>
     */
    inline void SetAuthentication(AuthenticationSummary&& value) { m_authenticationHasBeenSet = true; m_authentication = std::move(value); }

    /**
     * <p>A structure that describes whether the workspace uses SAML, IAM Identity
     * Center, or both methods for user authentication.</p>
     */
    inline WorkspaceDescription& WithAuthentication(const AuthenticationSummary& value) { SetAuthentication(value); return *this;}

    /**
     * <p>A structure that describes whether the workspace uses SAML, IAM Identity
     * Center, or both methods for user authentication.</p>
     */
    inline WorkspaceDescription& WithAuthentication(AuthenticationSummary&& value) { SetAuthentication(std::move(value)); return *this;}


    /**
     * <p>The date that the workspace was created.</p>
     */
    inline const Aws::Utils::DateTime& GetCreated() const{ return m_created; }

    /**
     * <p>The date that the workspace was created.</p>
     */
    inline bool CreatedHasBeenSet() const { return m_createdHasBeenSet; }

    /**
     * <p>The date that the workspace was created.</p>
     */
    inline void SetCreated(const Aws::Utils::DateTime& value) { m_createdHasBeenSet = true; m_created = value; }

    /**
     * <p>The date that the workspace was created.</p>
     */
    inline void SetCreated(Aws::Utils::DateTime&& value) { m_createdHasBeenSet = true; m_created = std::move(value); }

    /**
     * <p>The date that the workspace was created.</p>
     */
    inline WorkspaceDescription& WithCreated(const Aws::Utils::DateTime& value) { SetCreated(value); return *this;}

    /**
     * <p>The date that the workspace was created.</p>
     */
    inline WorkspaceDescription& WithCreated(Aws::Utils::DateTime&& value) { SetCreated(std::move(value)); return *this;}


    /**
     * <p>Specifies the Amazon Web Services data sources that have been configured to
     * have IAM roles and permissions created to allow Amazon Managed Grafana to read
     * data from these sources.</p> <p>This list is only used when the workspace was
     * created through the Amazon Web Services console, and the
     * <code>permissionType</code> is <code>SERVICE_MANAGED</code>.</p>
     */
    inline const Aws::Vector<DataSourceType>& GetDataSources() const{ return m_dataSources; }

    /**
     * <p>Specifies the Amazon Web Services data sources that have been configured to
     * have IAM roles and permissions created to allow Amazon Managed Grafana to read
     * data from these sources.</p> <p>This list is only used when the workspace was
     * created through the Amazon Web Services console, and the
     * <code>permissionType</code> is <code>SERVICE_MANAGED</code>.</p>
     */
    inline bool DataSourcesHasBeenSet() const { return m_dataSourcesHasBeenSet; }

    /**
     * <p>Specifies the Amazon Web Services data sources that have been configured to
     * have IAM roles and permissions created to allow Amazon Managed Grafana to read
     * data from these sources.</p> <p>This list is only used when the workspace was
     * created through the Amazon Web Services console, and the
     * <code>permissionType</code> is <code>SERVICE_MANAGED</code>.</p>
     */
    inline void SetDataSources(const Aws::Vector<DataSourceType>& value) { m_dataSourcesHasBeenSet = true; m_dataSources = value; }

    /**
     * <p>Specifies the Amazon Web Services data sources that have been configured to
     * have IAM roles and permissions created to allow Amazon Managed Grafana to read
     * data from these sources.</p> <p>This list is only used when the workspace was
     * created through the Amazon Web Services console, and the
     * <code>permissionType</code> is <code>SERVICE_MANAGED</code>.</p>
     */
    inline void SetDataSources(Aws::Vector<DataSourceType>&& value) { m_dataSourcesHasBeenSet = true; m_dataSources = std::move(value); }

    /**
     * <p>Specifies the Amazon Web Services data sources that have been configured to
     * have IAM roles and permissions created to allow Amazon Managed Grafana to read
     * data from these sources.</p> <p>This list is only used when the workspace was
     * created through the Amazon Web Services console, and the
     * <code>permissionType</code> is <code>SERVICE_MANAGED</code>.</p>
     */
    inline WorkspaceDescription& WithDataSources(const Aws::Vector<DataSourceType>& value) { SetDataSources(value); return *this;}

    /**
     * <p>Specifies the Amazon Web Services data sources that have been configured to
     * have IAM roles and permissions created to allow Amazon Managed Grafana to read
     * data from these sources.</p> <p>This list is only used when the workspace was
     * created through the Amazon Web Services console, and the
     * <code>permissionType</code> is <code>SERVICE_MANAGED</code>.</p>
     */
    inline WorkspaceDescription& WithDataSources(Aws::Vector<DataSourceType>&& value) { SetDataSources(std::move(value)); return *this;}

    /**
     * <p>Specifies the Amazon Web Services data sources that have been configured to
     * have IAM roles and permissions created to allow Amazon Managed Grafana to read
     * data from these sources.</p> <p>This list is only used when the workspace was
     * created through the Amazon Web Services console, and the
     * <code>permissionType</code> is <code>SERVICE_MANAGED</code>.</p>
     */
    inline WorkspaceDescription& AddDataSources(const DataSourceType& value) { m_dataSourcesHasBeenSet = true; m_dataSources.push_back(value); return *this; }

    /**
     * <p>Specifies the Amazon Web Services data sources that have been configured to
     * have IAM roles and permissions created to allow Amazon Managed Grafana to read
     * data from these sources.</p> <p>This list is only used when the workspace was
     * created through the Amazon Web Services console, and the
     * <code>permissionType</code> is <code>SERVICE_MANAGED</code>.</p>
     */
    inline WorkspaceDescription& AddDataSources(DataSourceType&& value) { m_dataSourcesHasBeenSet = true; m_dataSources.push_back(std::move(value)); return *this; }


    /**
     * <p>The user-defined description of the workspace.</p>
     */
    inline const Aws::String& GetDescription() const{ return m_description; }

    /**
     * <p>The user-defined description of the workspace.</p>
     */
    inline bool DescriptionHasBeenSet() const { return m_descriptionHasBeenSet; }

    /**
     * <p>The user-defined description of the workspace.</p>
     */
    inline void SetDescription(const Aws::String& value) { m_descriptionHasBeenSet = true; m_description = value; }

    /**
     * <p>The user-defined description of the workspace.</p>
     */
    inline void SetDescription(Aws::String&& value) { m_descriptionHasBeenSet = true; m_description = std::move(value); }

    /**
     * <p>The user-defined description of the workspace.</p>
     */
    inline void SetDescription(const char* value) { m_descriptionHasBeenSet = true; m_description.assign(value); }

    /**
     * <p>The user-defined description of the workspace.</p>
     */
    inline WorkspaceDescription& WithDescription(const Aws::String& value) { SetDescription(value); return *this;}

    /**
     * <p>The user-defined description of the workspace.</p>
     */
    inline WorkspaceDescription& WithDescription(Aws::String&& value) { SetDescription(std::move(value)); return *this;}

    /**
     * <p>The user-defined description of the workspace.</p>
     */
    inline WorkspaceDescription& WithDescription(const char* value) { SetDescription(value); return *this;}


    /**
     * <p>The URL that users can use to access the Grafana console in the
     * workspace.</p>
     */
    inline const Aws::String& GetEndpoint() const{ return m_endpoint; }

    /**
     * <p>The URL that users can use to access the Grafana console in the
     * workspace.</p>
     */
    inline bool EndpointHasBeenSet() const { return m_endpointHasBeenSet; }

    /**
     * <p>The URL that users can use to access the Grafana console in the
     * workspace.</p>
     */
    inline void SetEndpoint(const Aws::String& value) { m_endpointHasBeenSet = true; m_endpoint = value; }

    /**
     * <p>The URL that users can use to access the Grafana console in the
     * workspace.</p>
     */
    inline void SetEndpoint(Aws::String&& value) { m_endpointHasBeenSet = true; m_endpoint = std::move(value); }

    /**
     * <p>The URL that users can use to access the Grafana console in the
     * workspace.</p>
     */
    inline void SetEndpoint(const char* value) { m_endpointHasBeenSet = true; m_endpoint.assign(value); }

    /**
     * <p>The URL that users can use to access the Grafana console in the
     * workspace.</p>
     */
    inline WorkspaceDescription& WithEndpoint(const Aws::String& value) { SetEndpoint(value); return *this;}

    /**
     * <p>The URL that users can use to access the Grafana console in the
     * workspace.</p>
     */
    inline WorkspaceDescription& WithEndpoint(Aws::String&& value) { SetEndpoint(std::move(value)); return *this;}

    /**
     * <p>The URL that users can use to access the Grafana console in the
     * workspace.</p>
     */
    inline WorkspaceDescription& WithEndpoint(const char* value) { SetEndpoint(value); return *this;}


    /**
     * <p>Specifies whether this workspace has already fully used its free trial for
     * Grafana Enterprise.</p>
     */
    inline bool GetFreeTrialConsumed() const{ return m_freeTrialConsumed; }

    /**
     * <p>Specifies whether this workspace has already fully used its free trial for
     * Grafana Enterprise.</p>
     */
    inline bool FreeTrialConsumedHasBeenSet() const { return m_freeTrialConsumedHasBeenSet; }

    /**
     * <p>Specifies whether this workspace has already fully used its free trial for
     * Grafana Enterprise.</p>
     */
    inline void SetFreeTrialConsumed(bool value) { m_freeTrialConsumedHasBeenSet = true; m_freeTrialConsumed = value; }

    /**
     * <p>Specifies whether this workspace has already fully used its free trial for
     * Grafana Enterprise.</p>
     */
    inline WorkspaceDescription& WithFreeTrialConsumed(bool value) { SetFreeTrialConsumed(value); return *this;}


    /**
     * <p>If this workspace is currently in the free trial period for Grafana
     * Enterprise, this value specifies when that free trial ends.</p>
     */
    inline const Aws::Utils::DateTime& GetFreeTrialExpiration() const{ return m_freeTrialExpiration; }

    /**
     * <p>If this workspace is currently in the free trial period for Grafana
     * Enterprise, this value specifies when that free trial ends.</p>
     */
    inline bool FreeTrialExpirationHasBeenSet() const { return m_freeTrialExpirationHasBeenSet; }

    /**
     * <p>If this workspace is currently in the free trial period for Grafana
     * Enterprise, this value specifies when that free trial ends.</p>
     */
    inline void SetFreeTrialExpiration(const Aws::Utils::DateTime& value) { m_freeTrialExpirationHasBeenSet = true; m_freeTrialExpiration = value; }

    /**
     * <p>If this workspace is currently in the free trial period for Grafana
     * Enterprise, this value specifies when that free trial ends.</p>
     */
    inline void SetFreeTrialExpiration(Aws::Utils::DateTime&& value) { m_freeTrialExpirationHasBeenSet = true; m_freeTrialExpiration = std::move(value); }

    /**
     * <p>If this workspace is currently in the free trial period for Grafana
     * Enterprise, this value specifies when that free trial ends.</p>
     */
    inline WorkspaceDescription& WithFreeTrialExpiration(const Aws::Utils::DateTime& value) { SetFreeTrialExpiration(value); return *this;}

    /**
     * <p>If this workspace is currently in the free trial period for Grafana
     * Enterprise, this value specifies when that free trial ends.</p>
     */
    inline WorkspaceDescription& WithFreeTrialExpiration(Aws::Utils::DateTime&& value) { SetFreeTrialExpiration(std::move(value)); return *this;}


    /**
     * <p>The version of Grafana supported in this workspace.</p>
     */
    inline const Aws::String& GetGrafanaVersion() const{ return m_grafanaVersion; }

    /**
     * <p>The version of Grafana supported in this workspace.</p>
     */
    inline bool GrafanaVersionHasBeenSet() const { return m_grafanaVersionHasBeenSet; }

    /**
     * <p>The version of Grafana supported in this workspace.</p>
     */
    inline void SetGrafanaVersion(const Aws::String& value) { m_grafanaVersionHasBeenSet = true; m_grafanaVersion = value; }

    /**
     * <p>The version of Grafana supported in this workspace.</p>
     */
    inline void SetGrafanaVersion(Aws::String&& value) { m_grafanaVersionHasBeenSet = true; m_grafanaVersion = std::move(value); }

    /**
     * <p>The version of Grafana supported in this workspace.</p>
     */
    inline void SetGrafanaVersion(const char* value) { m_grafanaVersionHasBeenSet = true; m_grafanaVersion.assign(value); }

    /**
     * <p>The version of Grafana supported in this workspace.</p>
     */
    inline WorkspaceDescription& WithGrafanaVersion(const Aws::String& value) { SetGrafanaVersion(value); return *this;}

    /**
     * <p>The version of Grafana supported in this workspace.</p>
     */
    inline WorkspaceDescription& WithGrafanaVersion(Aws::String&& value) { SetGrafanaVersion(std::move(value)); return *this;}

    /**
     * <p>The version of Grafana supported in this workspace.</p>
     */
    inline WorkspaceDescription& WithGrafanaVersion(const char* value) { SetGrafanaVersion(value); return *this;}


    /**
     * <p>The unique ID of this workspace.</p>
     */
    inline const Aws::String& GetId() const{ return m_id; }

    /**
     * <p>The unique ID of this workspace.</p>
     */
    inline bool IdHasBeenSet() const { return m_idHasBeenSet; }

    /**
     * <p>The unique ID of this workspace.</p>
     */
    inline void SetId(const Aws::String& value) { m_idHasBeenSet = true; m_id = value; }

    /**
     * <p>The unique ID of this workspace.</p>
     */
    inline void SetId(Aws::String&& value) { m_idHasBeenSet = true; m_id = std::move(value); }

    /**
     * <p>The unique ID of this workspace.</p>
     */
    inline void SetId(const char* value) { m_idHasBeenSet = true; m_id.assign(value); }

    /**
     * <p>The unique ID of this workspace.</p>
     */
    inline WorkspaceDescription& WithId(const Aws::String& value) { SetId(value); return *this;}

    /**
     * <p>The unique ID of this workspace.</p>
     */
    inline WorkspaceDescription& WithId(Aws::String&& value) { SetId(std::move(value)); return *this;}

    /**
     * <p>The unique ID of this workspace.</p>
     */
    inline WorkspaceDescription& WithId(const char* value) { SetId(value); return *this;}


    /**
     * <p>If this workspace has a full Grafana Enterprise license, this specifies when
     * the license ends and will need to be renewed.</p>
     */
    inline const Aws::Utils::DateTime& GetLicenseExpiration() const{ return m_licenseExpiration; }

    /**
     * <p>If this workspace has a full Grafana Enterprise license, this specifies when
     * the license ends and will need to be renewed.</p>
     */
    inline bool LicenseExpirationHasBeenSet() const { return m_licenseExpirationHasBeenSet; }

    /**
     * <p>If this workspace has a full Grafana Enterprise license, this specifies when
     * the license ends and will need to be renewed.</p>
     */
    inline void SetLicenseExpiration(const Aws::Utils::DateTime& value) { m_licenseExpirationHasBeenSet = true; m_licenseExpiration = value; }

    /**
     * <p>If this workspace has a full Grafana Enterprise license, this specifies when
     * the license ends and will need to be renewed.</p>
     */
    inline void SetLicenseExpiration(Aws::Utils::DateTime&& value) { m_licenseExpirationHasBeenSet = true; m_licenseExpiration = std::move(value); }

    /**
     * <p>If this workspace has a full Grafana Enterprise license, this specifies when
     * the license ends and will need to be renewed.</p>
     */
    inline WorkspaceDescription& WithLicenseExpiration(const Aws::Utils::DateTime& value) { SetLicenseExpiration(value); return *this;}

    /**
     * <p>If this workspace has a full Grafana Enterprise license, this specifies when
     * the license ends and will need to be renewed.</p>
     */
    inline WorkspaceDescription& WithLicenseExpiration(Aws::Utils::DateTime&& value) { SetLicenseExpiration(std::move(value)); return *this;}


    /**
     * <p>Specifies whether this workspace has a full Grafana Enterprise license or a
     * free trial license.</p>
     */
    inline const LicenseType& GetLicenseType() const{ return m_licenseType; }

    /**
     * <p>Specifies whether this workspace has a full Grafana Enterprise license or a
     * free trial license.</p>
     */
    inline bool LicenseTypeHasBeenSet() const { return m_licenseTypeHasBeenSet; }

    /**
     * <p>Specifies whether this workspace has a full Grafana Enterprise license or a
     * free trial license.</p>
     */
    inline void SetLicenseType(const LicenseType& value) { m_licenseTypeHasBeenSet = true; m_licenseType = value; }

    /**
     * <p>Specifies whether this workspace has a full Grafana Enterprise license or a
     * free trial license.</p>
     */
    inline void SetLicenseType(LicenseType&& value) { m_licenseTypeHasBeenSet = true; m_licenseType = std::move(value); }

    /**
     * <p>Specifies whether this workspace has a full Grafana Enterprise license or a
     * free trial license.</p>
     */
    inline WorkspaceDescription& WithLicenseType(const LicenseType& value) { SetLicenseType(value); return *this;}

    /**
     * <p>Specifies whether this workspace has a full Grafana Enterprise license or a
     * free trial license.</p>
     */
    inline WorkspaceDescription& WithLicenseType(LicenseType&& value) { SetLicenseType(std::move(value)); return *this;}


    /**
     * <p>The most recent date that the workspace was modified.</p>
     */
    inline const Aws::Utils::DateTime& GetModified() const{ return m_modified; }

    /**
     * <p>The most recent date that the workspace was modified.</p>
     */
    inline bool ModifiedHasBeenSet() const { return m_modifiedHasBeenSet; }

    /**
     * <p>The most recent date that the workspace was modified.</p>
     */
    inline void SetModified(const Aws::Utils::DateTime& value) { m_modifiedHasBeenSet = true; m_modified = value; }

    /**
     * <p>The most recent date that the workspace was modified.</p>
     */
    inline void SetModified(Aws::Utils::DateTime&& value) { m_modifiedHasBeenSet = true; m_modified = std::move(value); }

    /**
     * <p>The most recent date that the workspace was modified.</p>
     */
    inline WorkspaceDescription& WithModified(const Aws::Utils::DateTime& value) { SetModified(value); return *this;}

    /**
     * <p>The most recent date that the workspace was modified.</p>
     */
    inline WorkspaceDescription& WithModified(Aws::Utils::DateTime&& value) { SetModified(std::move(value)); return *this;}


    /**
     * <p>The name of the workspace.</p>
     */
    inline const Aws::String& GetName() const{ return m_name; }

    /**
     * <p>The name of the workspace.</p>
     */
    inline bool NameHasBeenSet() const { return m_nameHasBeenSet; }

    /**
     * <p>The name of the workspace.</p>
     */
    inline void SetName(const Aws::String& value) { m_nameHasBeenSet = true; m_name = value; }

    /**
     * <p>The name of the workspace.</p>
     */
    inline void SetName(Aws::String&& value) { m_nameHasBeenSet = true; m_name = std::move(value); }

    /**
     * <p>The name of the workspace.</p>
     */
    inline void SetName(const char* value) { m_nameHasBeenSet = true; m_name.assign(value); }

    /**
     * <p>The name of the workspace.</p>
     */
    inline WorkspaceDescription& WithName(const Aws::String& value) { SetName(value); return *this;}

    /**
     * <p>The name of the workspace.</p>
     */
    inline WorkspaceDescription& WithName(Aws::String&& value) { SetName(std::move(value)); return *this;}

    /**
     * <p>The name of the workspace.</p>
     */
    inline WorkspaceDescription& WithName(const char* value) { SetName(value); return *this;}


    /**
     * <p>The configuration settings for network access to your workspace.</p>
     */
    inline const NetworkAccessConfiguration& GetNetworkAccessControl() const{ return m_networkAccessControl; }

    /**
     * <p>The configuration settings for network access to your workspace.</p>
     */
    inline bool NetworkAccessControlHasBeenSet() const { return m_networkAccessControlHasBeenSet; }

    /**
     * <p>The configuration settings for network access to your workspace.</p>
     */
    inline void SetNetworkAccessControl(const NetworkAccessConfiguration& value) { m_networkAccessControlHasBeenSet = true; m_networkAccessControl = value; }

    /**
     * <p>The configuration settings for network access to your workspace.</p>
     */
    inline void SetNetworkAccessControl(NetworkAccessConfiguration&& value) { m_networkAccessControlHasBeenSet = true; m_networkAccessControl = std::move(value); }

    /**
     * <p>The configuration settings for network access to your workspace.</p>
     */
    inline WorkspaceDescription& WithNetworkAccessControl(const NetworkAccessConfiguration& value) { SetNetworkAccessControl(value); return *this;}

    /**
     * <p>The configuration settings for network access to your workspace.</p>
     */
    inline WorkspaceDescription& WithNetworkAccessControl(NetworkAccessConfiguration&& value) { SetNetworkAccessControl(std::move(value)); return *this;}


    /**
     * <p>The Amazon Web Services notification channels that Amazon Managed Grafana can
     * automatically create IAM roles and permissions for, to allow Amazon Managed
     * Grafana to use these channels.</p>
     */
    inline const Aws::Vector<NotificationDestinationType>& GetNotificationDestinations() const{ return m_notificationDestinations; }

    /**
     * <p>The Amazon Web Services notification channels that Amazon Managed Grafana can
     * automatically create IAM roles and permissions for, to allow Amazon Managed
     * Grafana to use these channels.</p>
     */
    inline bool NotificationDestinationsHasBeenSet() const { return m_notificationDestinationsHasBeenSet; }

    /**
     * <p>The Amazon Web Services notification channels that Amazon Managed Grafana can
     * automatically create IAM roles and permissions for, to allow Amazon Managed
     * Grafana to use these channels.</p>
     */
    inline void SetNotificationDestinations(const Aws::Vector<NotificationDestinationType>& value) { m_notificationDestinationsHasBeenSet = true; m_notificationDestinations = value; }

    /**
     * <p>The Amazon Web Services notification channels that Amazon Managed Grafana can
     * automatically create IAM roles and permissions for, to allow Amazon Managed
     * Grafana to use these channels.</p>
     */
    inline void SetNotificationDestinations(Aws::Vector<NotificationDestinationType>&& value) { m_notificationDestinationsHasBeenSet = true; m_notificationDestinations = std::move(value); }

    /**
     * <p>The Amazon Web Services notification channels that Amazon Managed Grafana can
     * automatically create IAM roles and permissions for, to allow Amazon Managed
     * Grafana to use these channels.</p>
     */
    inline WorkspaceDescription& WithNotificationDestinations(const Aws::Vector<NotificationDestinationType>& value) { SetNotificationDestinations(value); return *this;}

    /**
     * <p>The Amazon Web Services notification channels that Amazon Managed Grafana can
     * automatically create IAM roles and permissions for, to allow Amazon Managed
     * Grafana to use these channels.</p>
     */
    inline WorkspaceDescription& WithNotificationDestinations(Aws::Vector<NotificationDestinationType>&& value) { SetNotificationDestinations(std::move(value)); return *this;}

    /**
     * <p>The Amazon Web Services notification channels that Amazon Managed Grafana can
     * automatically create IAM roles and permissions for, to allow Amazon Managed
     * Grafana to use these channels.</p>
     */
    inline WorkspaceDescription& AddNotificationDestinations(const NotificationDestinationType& value) { m_notificationDestinationsHasBeenSet = true; m_notificationDestinations.push_back(value); return *this; }

    /**
     * <p>The Amazon Web Services notification channels that Amazon Managed Grafana can
     * automatically create IAM roles and permissions for, to allow Amazon Managed
     * Grafana to use these channels.</p>
     */
    inline WorkspaceDescription& AddNotificationDestinations(NotificationDestinationType&& value) { m_notificationDestinationsHasBeenSet = true; m_notificationDestinations.push_back(std::move(value)); return *this; }


    /**
     * <p>The name of the IAM role that is used to access resources through
     * Organizations.</p>
     */
    inline const Aws::String& GetOrganizationRoleName() const{ return m_organizationRoleName; }

    /**
     * <p>The name of the IAM role that is used to access resources through
     * Organizations.</p>
     */
    inline bool OrganizationRoleNameHasBeenSet() const { return m_organizationRoleNameHasBeenSet; }

    /**
     * <p>The name of the IAM role that is used to access resources through
     * Organizations.</p>
     */
    inline void SetOrganizationRoleName(const Aws::String& value) { m_organizationRoleNameHasBeenSet = true; m_organizationRoleName = value; }

    /**
     * <p>The name of the IAM role that is used to access resources through
     * Organizations.</p>
     */
    inline void SetOrganizationRoleName(Aws::String&& value) { m_organizationRoleNameHasBeenSet = true; m_organizationRoleName = std::move(value); }

    /**
     * <p>The name of the IAM role that is used to access resources through
     * Organizations.</p>
     */
    inline void SetOrganizationRoleName(const char* value) { m_organizationRoleNameHasBeenSet = true; m_organizationRoleName.assign(value); }

    /**
     * <p>The name of the IAM role that is used to access resources through
     * Organizations.</p>
     */
    inline WorkspaceDescription& WithOrganizationRoleName(const Aws::String& value) { SetOrganizationRoleName(value); return *this;}

    /**
     * <p>The name of the IAM role that is used to access resources through
     * Organizations.</p>
     */
    inline WorkspaceDescription& WithOrganizationRoleName(Aws::String&& value) { SetOrganizationRoleName(std::move(value)); return *this;}

    /**
     * <p>The name of the IAM role that is used to access resources through
     * Organizations.</p>
     */
    inline WorkspaceDescription& WithOrganizationRoleName(const char* value) { SetOrganizationRoleName(value); return *this;}


    /**
     * <p>Specifies the organizational units that this workspace is allowed to use data
     * sources from, if this workspace is in an account that is part of an
     * organization.</p>
     */
    inline const Aws::Vector<Aws::String>& GetOrganizationalUnits() const{ return m_organizationalUnits; }

    /**
     * <p>Specifies the organizational units that this workspace is allowed to use data
     * sources from, if this workspace is in an account that is part of an
     * organization.</p>
     */
    inline bool OrganizationalUnitsHasBeenSet() const { return m_organizationalUnitsHasBeenSet; }

    /**
     * <p>Specifies the organizational units that this workspace is allowed to use data
     * sources from, if this workspace is in an account that is part of an
     * organization.</p>
     */
    inline void SetOrganizationalUnits(const Aws::Vector<Aws::String>& value) { m_organizationalUnitsHasBeenSet = true; m_organizationalUnits = value; }

    /**
     * <p>Specifies the organizational units that this workspace is allowed to use data
     * sources from, if this workspace is in an account that is part of an
     * organization.</p>
     */
    inline void SetOrganizationalUnits(Aws::Vector<Aws::String>&& value) { m_organizationalUnitsHasBeenSet = true; m_organizationalUnits = std::move(value); }

    /**
     * <p>Specifies the organizational units that this workspace is allowed to use data
     * sources from, if this workspace is in an account that is part of an
     * organization.</p>
     */
    inline WorkspaceDescription& WithOrganizationalUnits(const Aws::Vector<Aws::String>& value) { SetOrganizationalUnits(value); return *this;}

    /**
     * <p>Specifies the organizational units that this workspace is allowed to use data
     * sources from, if this workspace is in an account that is part of an
     * organization.</p>
     */
    inline WorkspaceDescription& WithOrganizationalUnits(Aws::Vector<Aws::String>&& value) { SetOrganizationalUnits(std::move(value)); return *this;}

    /**
     * <p>Specifies the organizational units that this workspace is allowed to use data
     * sources from, if this workspace is in an account that is part of an
     * organization.</p>
     */
    inline WorkspaceDescription& AddOrganizationalUnits(const Aws::String& value) { m_organizationalUnitsHasBeenSet = true; m_organizationalUnits.push_back(value); return *this; }

    /**
     * <p>Specifies the organizational units that this workspace is allowed to use data
     * sources from, if this workspace is in an account that is part of an
     * organization.</p>
     */
    inline WorkspaceDescription& AddOrganizationalUnits(Aws::String&& value) { m_organizationalUnitsHasBeenSet = true; m_organizationalUnits.push_back(std::move(value)); return *this; }

    /**
     * <p>Specifies the organizational units that this workspace is allowed to use data
     * sources from, if this workspace is in an account that is part of an
     * organization.</p>
     */
    inline WorkspaceDescription& AddOrganizationalUnits(const char* value) { m_organizationalUnitsHasBeenSet = true; m_organizationalUnits.push_back(value); return *this; }


    /**
     * <p>If this is <code>SERVICE_MANAGED</code>, and the workplace was created
     * through the Amazon Managed Grafana console, then Amazon Managed Grafana
     * automatically creates the IAM roles and provisions the permissions that the
     * workspace needs to use Amazon Web Services data sources and notification
     * channels.</p> <p>If this is <code>CUSTOMER_MANAGED</code>, you must manage those
     * roles and permissions yourself.</p> <p>If you are working with a workspace in a
     * member account of an organization and that account is not a delegated
     * administrator account, and you want the workspace to access data sources in
     * other Amazon Web Services accounts in the organization, this parameter must be
     * set to <code>CUSTOMER_MANAGED</code>.</p> <p>For more information about
     * converting between customer and service managed, see <a
     * href="https://docs.aws.amazon.com/grafana/latest/userguide/AMG-datasource-and-notification.html">Managing
     * permissions for data sources and notification channels</a>. For more information
     * about the roles and permissions that must be managed for customer managed
     * workspaces, see <a
     * href="https://docs.aws.amazon.com/grafana/latest/userguide/AMG-manage-permissions.html">Amazon
     * Managed Grafana permissions and policies for Amazon Web Services data sources
     * and notification channels</a> </p>
     */
    inline const PermissionType& GetPermissionType() const{ return m_permissionType; }

    /**
     * <p>If this is <code>SERVICE_MANAGED</code>, and the workplace was created
     * through the Amazon Managed Grafana console, then Amazon Managed Grafana
     * automatically creates the IAM roles and provisions the permissions that the
     * workspace needs to use Amazon Web Services data sources and notification
     * channels.</p> <p>If this is <code>CUSTOMER_MANAGED</code>, you must manage those
     * roles and permissions yourself.</p> <p>If you are working with a workspace in a
     * member account of an organization and that account is not a delegated
     * administrator account, and you want the workspace to access data sources in
     * other Amazon Web Services accounts in the organization, this parameter must be
     * set to <code>CUSTOMER_MANAGED</code>.</p> <p>For more information about
     * converting between customer and service managed, see <a
     * href="https://docs.aws.amazon.com/grafana/latest/userguide/AMG-datasource-and-notification.html">Managing
     * permissions for data sources and notification channels</a>. For more information
     * about the roles and permissions that must be managed for customer managed
     * workspaces, see <a
     * href="https://docs.aws.amazon.com/grafana/latest/userguide/AMG-manage-permissions.html">Amazon
     * Managed Grafana permissions and policies for Amazon Web Services data sources
     * and notification channels</a> </p>
     */
    inline bool PermissionTypeHasBeenSet() const { return m_permissionTypeHasBeenSet; }

    /**
     * <p>If this is <code>SERVICE_MANAGED</code>, and the workplace was created
     * through the Amazon Managed Grafana console, then Amazon Managed Grafana
     * automatically creates the IAM roles and provisions the permissions that the
     * workspace needs to use Amazon Web Services data sources and notification
     * channels.</p> <p>If this is <code>CUSTOMER_MANAGED</code>, you must manage those
     * roles and permissions yourself.</p> <p>If you are working with a workspace in a
     * member account of an organization and that account is not a delegated
     * administrator account, and you want the workspace to access data sources in
     * other Amazon Web Services accounts in the organization, this parameter must be
     * set to <code>CUSTOMER_MANAGED</code>.</p> <p>For more information about
     * converting between customer and service managed, see <a
     * href="https://docs.aws.amazon.com/grafana/latest/userguide/AMG-datasource-and-notification.html">Managing
     * permissions for data sources and notification channels</a>. For more information
     * about the roles and permissions that must be managed for customer managed
     * workspaces, see <a
     * href="https://docs.aws.amazon.com/grafana/latest/userguide/AMG-manage-permissions.html">Amazon
     * Managed Grafana permissions and policies for Amazon Web Services data sources
     * and notification channels</a> </p>
     */
    inline void SetPermissionType(const PermissionType& value) { m_permissionTypeHasBeenSet = true; m_permissionType = value; }

    /**
     * <p>If this is <code>SERVICE_MANAGED</code>, and the workplace was created
     * through the Amazon Managed Grafana console, then Amazon Managed Grafana
     * automatically creates the IAM roles and provisions the permissions that the
     * workspace needs to use Amazon Web Services data sources and notification
     * channels.</p> <p>If this is <code>CUSTOMER_MANAGED</code>, you must manage those
     * roles and permissions yourself.</p> <p>If you are working with a workspace in a
     * member account of an organization and that account is not a delegated
     * administrator account, and you want the workspace to access data sources in
     * other Amazon Web Services accounts in the organization, this parameter must be
     * set to <code>CUSTOMER_MANAGED</code>.</p> <p>For more information about
     * converting between customer and service managed, see <a
     * href="https://docs.aws.amazon.com/grafana/latest/userguide/AMG-datasource-and-notification.html">Managing
     * permissions for data sources and notification channels</a>. For more information
     * about the roles and permissions that must be managed for customer managed
     * workspaces, see <a
     * href="https://docs.aws.amazon.com/grafana/latest/userguide/AMG-manage-permissions.html">Amazon
     * Managed Grafana permissions and policies for Amazon Web Services data sources
     * and notification channels</a> </p>
     */
    inline void SetPermissionType(PermissionType&& value) { m_permissionTypeHasBeenSet = true; m_permissionType = std::move(value); }

    /**
     * <p>If this is <code>SERVICE_MANAGED</code>, and the workplace was created
     * through the Amazon Managed Grafana console, then Amazon Managed Grafana
     * automatically creates the IAM roles and provisions the permissions that the
     * workspace needs to use Amazon Web Services data sources and notification
     * channels.</p> <p>If this is <code>CUSTOMER_MANAGED</code>, you must manage those
     * roles and permissions yourself.</p> <p>If you are working with a workspace in a
     * member account of an organization and that account is not a delegated
     * administrator account, and you want the workspace to access data sources in
     * other Amazon Web Services accounts in the organization, this parameter must be
     * set to <code>CUSTOMER_MANAGED</code>.</p> <p>For more information about
     * converting between customer and service managed, see <a
     * href="https://docs.aws.amazon.com/grafana/latest/userguide/AMG-datasource-and-notification.html">Managing
     * permissions for data sources and notification channels</a>. For more information
     * about the roles and permissions that must be managed for customer managed
     * workspaces, see <a
     * href="https://docs.aws.amazon.com/grafana/latest/userguide/AMG-manage-permissions.html">Amazon
     * Managed Grafana permissions and policies for Amazon Web Services data sources
     * and notification channels</a> </p>
     */
    inline WorkspaceDescription& WithPermissionType(const PermissionType& value) { SetPermissionType(value); return *this;}

    /**
     * <p>If this is <code>SERVICE_MANAGED</code>, and the workplace was created
     * through the Amazon Managed Grafana console, then Amazon Managed Grafana
     * automatically creates the IAM roles and provisions the permissions that the
     * workspace needs to use Amazon Web Services data sources and notification
     * channels.</p> <p>If this is <code>CUSTOMER_MANAGED</code>, you must manage those
     * roles and permissions yourself.</p> <p>If you are working with a workspace in a
     * member account of an organization and that account is not a delegated
     * administrator account, and you want the workspace to access data sources in
     * other Amazon Web Services accounts in the organization, this parameter must be
     * set to <code>CUSTOMER_MANAGED</code>.</p> <p>For more information about
     * converting between customer and service managed, see <a
     * href="https://docs.aws.amazon.com/grafana/latest/userguide/AMG-datasource-and-notification.html">Managing
     * permissions for data sources and notification channels</a>. For more information
     * about the roles and permissions that must be managed for customer managed
     * workspaces, see <a
     * href="https://docs.aws.amazon.com/grafana/latest/userguide/AMG-manage-permissions.html">Amazon
     * Managed Grafana permissions and policies for Amazon Web Services data sources
     * and notification channels</a> </p>
     */
    inline WorkspaceDescription& WithPermissionType(PermissionType&& value) { SetPermissionType(std::move(value)); return *this;}


    /**
     * <p>The name of the CloudFormation stack set that is used to generate IAM roles
     * to be used for this workspace.</p>
     */
    inline const Aws::String& GetStackSetName() const{ return m_stackSetName; }

    /**
     * <p>The name of the CloudFormation stack set that is used to generate IAM roles
     * to be used for this workspace.</p>
     */
    inline bool StackSetNameHasBeenSet() const { return m_stackSetNameHasBeenSet; }

    /**
     * <p>The name of the CloudFormation stack set that is used to generate IAM roles
     * to be used for this workspace.</p>
     */
    inline void SetStackSetName(const Aws::String& value) { m_stackSetNameHasBeenSet = true; m_stackSetName = value; }

    /**
     * <p>The name of the CloudFormation stack set that is used to generate IAM roles
     * to be used for this workspace.</p>
     */
    inline void SetStackSetName(Aws::String&& value) { m_stackSetNameHasBeenSet = true; m_stackSetName = std::move(value); }

    /**
     * <p>The name of the CloudFormation stack set that is used to generate IAM roles
     * to be used for this workspace.</p>
     */
    inline void SetStackSetName(const char* value) { m_stackSetNameHasBeenSet = true; m_stackSetName.assign(value); }

    /**
     * <p>The name of the CloudFormation stack set that is used to generate IAM roles
     * to be used for this workspace.</p>
     */
    inline WorkspaceDescription& WithStackSetName(const Aws::String& value) { SetStackSetName(value); return *this;}

    /**
     * <p>The name of the CloudFormation stack set that is used to generate IAM roles
     * to be used for this workspace.</p>
     */
    inline WorkspaceDescription& WithStackSetName(Aws::String&& value) { SetStackSetName(std::move(value)); return *this;}

    /**
     * <p>The name of the CloudFormation stack set that is used to generate IAM roles
     * to be used for this workspace.</p>
     */
    inline WorkspaceDescription& WithStackSetName(const char* value) { SetStackSetName(value); return *this;}


    /**
     * <p>The current status of the workspace.</p>
     */
    inline const WorkspaceStatus& GetStatus() const{ return m_status; }

    /**
     * <p>The current status of the workspace.</p>
     */
    inline bool StatusHasBeenSet() const { return m_statusHasBeenSet; }

    /**
     * <p>The current status of the workspace.</p>
     */
    inline void SetStatus(const WorkspaceStatus& value) { m_statusHasBeenSet = true; m_status = value; }

    /**
     * <p>The current status of the workspace.</p>
     */
    inline void SetStatus(WorkspaceStatus&& value) { m_statusHasBeenSet = true; m_status = std::move(value); }

    /**
     * <p>The current status of the workspace.</p>
     */
    inline WorkspaceDescription& WithStatus(const WorkspaceStatus& value) { SetStatus(value); return *this;}

    /**
     * <p>The current status of the workspace.</p>
     */
    inline WorkspaceDescription& WithStatus(WorkspaceStatus&& value) { SetStatus(std::move(value)); return *this;}


    /**
     * <p>The list of tags associated with the workspace.</p>
     */
    inline const Aws::Map<Aws::String, Aws::String>& GetTags() const{ return m_tags; }

    /**
     * <p>The list of tags associated with the workspace.</p>
     */
    inline bool TagsHasBeenSet() const { return m_tagsHasBeenSet; }

    /**
     * <p>The list of tags associated with the workspace.</p>
     */
    inline void SetTags(const Aws::Map<Aws::String, Aws::String>& value) { m_tagsHasBeenSet = true; m_tags = value; }

    /**
     * <p>The list of tags associated with the workspace.</p>
     */
    inline void SetTags(Aws::Map<Aws::String, Aws::String>&& value) { m_tagsHasBeenSet = true; m_tags = std::move(value); }

    /**
     * <p>The list of tags associated with the workspace.</p>
     */
    inline WorkspaceDescription& WithTags(const Aws::Map<Aws::String, Aws::String>& value) { SetTags(value); return *this;}

    /**
     * <p>The list of tags associated with the workspace.</p>
     */
    inline WorkspaceDescription& WithTags(Aws::Map<Aws::String, Aws::String>&& value) { SetTags(std::move(value)); return *this;}

    /**
     * <p>The list of tags associated with the workspace.</p>
     */
    inline WorkspaceDescription& AddTags(const Aws::String& key, const Aws::String& value) { m_tagsHasBeenSet = true; m_tags.emplace(key, value); return *this; }

    /**
     * <p>The list of tags associated with the workspace.</p>
     */
    inline WorkspaceDescription& AddTags(Aws::String&& key, const Aws::String& value) { m_tagsHasBeenSet = true; m_tags.emplace(std::move(key), value); return *this; }

    /**
     * <p>The list of tags associated with the workspace.</p>
     */
    inline WorkspaceDescription& AddTags(const Aws::String& key, Aws::String&& value) { m_tagsHasBeenSet = true; m_tags.emplace(key, std::move(value)); return *this; }

    /**
     * <p>The list of tags associated with the workspace.</p>
     */
    inline WorkspaceDescription& AddTags(Aws::String&& key, Aws::String&& value) { m_tagsHasBeenSet = true; m_tags.emplace(std::move(key), std::move(value)); return *this; }

    /**
     * <p>The list of tags associated with the workspace.</p>
     */
    inline WorkspaceDescription& AddTags(const char* key, Aws::String&& value) { m_tagsHasBeenSet = true; m_tags.emplace(key, std::move(value)); return *this; }

    /**
     * <p>The list of tags associated with the workspace.</p>
     */
    inline WorkspaceDescription& AddTags(Aws::String&& key, const char* value) { m_tagsHasBeenSet = true; m_tags.emplace(std::move(key), value); return *this; }

    /**
     * <p>The list of tags associated with the workspace.</p>
     */
    inline WorkspaceDescription& AddTags(const char* key, const char* value) { m_tagsHasBeenSet = true; m_tags.emplace(key, value); return *this; }


    /**
     * <p>The configuration for connecting to data sources in a private VPC (Amazon
     * Virtual Private Cloud).</p>
     */
    inline const VpcConfiguration& GetVpcConfiguration() const{ return m_vpcConfiguration; }

    /**
     * <p>The configuration for connecting to data sources in a private VPC (Amazon
     * Virtual Private Cloud).</p>
     */
    inline bool VpcConfigurationHasBeenSet() const { return m_vpcConfigurationHasBeenSet; }

    /**
     * <p>The configuration for connecting to data sources in a private VPC (Amazon
     * Virtual Private Cloud).</p>
     */
    inline void SetVpcConfiguration(const VpcConfiguration& value) { m_vpcConfigurationHasBeenSet = true; m_vpcConfiguration = value; }

    /**
     * <p>The configuration for connecting to data sources in a private VPC (Amazon
     * Virtual Private Cloud).</p>
     */
    inline void SetVpcConfiguration(VpcConfiguration&& value) { m_vpcConfigurationHasBeenSet = true; m_vpcConfiguration = std::move(value); }

    /**
     * <p>The configuration for connecting to data sources in a private VPC (Amazon
     * Virtual Private Cloud).</p>
     */
    inline WorkspaceDescription& WithVpcConfiguration(const VpcConfiguration& value) { SetVpcConfiguration(value); return *this;}

    /**
     * <p>The configuration for connecting to data sources in a private VPC (Amazon
     * Virtual Private Cloud).</p>
     */
    inline WorkspaceDescription& WithVpcConfiguration(VpcConfiguration&& value) { SetVpcConfiguration(std::move(value)); return *this;}


    /**
     * <p>The IAM role that grants permissions to the Amazon Web Services resources
     * that the workspace will view data from. This role must already exist.</p>
     */
    inline const Aws::String& GetWorkspaceRoleArn() const{ return m_workspaceRoleArn; }

    /**
     * <p>The IAM role that grants permissions to the Amazon Web Services resources
     * that the workspace will view data from. This role must already exist.</p>
     */
    inline bool WorkspaceRoleArnHasBeenSet() const { return m_workspaceRoleArnHasBeenSet; }

    /**
     * <p>The IAM role that grants permissions to the Amazon Web Services resources
     * that the workspace will view data from. This role must already exist.</p>
     */
    inline void SetWorkspaceRoleArn(const Aws::String& value) { m_workspaceRoleArnHasBeenSet = true; m_workspaceRoleArn = value; }

    /**
     * <p>The IAM role that grants permissions to the Amazon Web Services resources
     * that the workspace will view data from. This role must already exist.</p>
     */
    inline void SetWorkspaceRoleArn(Aws::String&& value) { m_workspaceRoleArnHasBeenSet = true; m_workspaceRoleArn = std::move(value); }

    /**
     * <p>The IAM role that grants permissions to the Amazon Web Services resources
     * that the workspace will view data from. This role must already exist.</p>
     */
    inline void SetWorkspaceRoleArn(const char* value) { m_workspaceRoleArnHasBeenSet = true; m_workspaceRoleArn.assign(value); }

    /**
     * <p>The IAM role that grants permissions to the Amazon Web Services resources
     * that the workspace will view data from. This role must already exist.</p>
     */
    inline WorkspaceDescription& WithWorkspaceRoleArn(const Aws::String& value) { SetWorkspaceRoleArn(value); return *this;}

    /**
     * <p>The IAM role that grants permissions to the Amazon Web Services resources
     * that the workspace will view data from. This role must already exist.</p>
     */
    inline WorkspaceDescription& WithWorkspaceRoleArn(Aws::String&& value) { SetWorkspaceRoleArn(std::move(value)); return *this;}

    /**
     * <p>The IAM role that grants permissions to the Amazon Web Services resources
     * that the workspace will view data from. This role must already exist.</p>
     */
    inline WorkspaceDescription& WithWorkspaceRoleArn(const char* value) { SetWorkspaceRoleArn(value); return *this;}

  private:

    AccountAccessType m_accountAccessType;
    bool m_accountAccessTypeHasBeenSet = false;

    AuthenticationSummary m_authentication;
    bool m_authenticationHasBeenSet = false;

    Aws::Utils::DateTime m_created;
    bool m_createdHasBeenSet = false;

    Aws::Vector<DataSourceType> m_dataSources;
    bool m_dataSourcesHasBeenSet = false;

    Aws::String m_description;
    bool m_descriptionHasBeenSet = false;

    Aws::String m_endpoint;
    bool m_endpointHasBeenSet = false;

    bool m_freeTrialConsumed;
    bool m_freeTrialConsumedHasBeenSet = false;

    Aws::Utils::DateTime m_freeTrialExpiration;
    bool m_freeTrialExpirationHasBeenSet = false;

    Aws::String m_grafanaVersion;
    bool m_grafanaVersionHasBeenSet = false;

    Aws::String m_id;
    bool m_idHasBeenSet = false;

    Aws::Utils::DateTime m_licenseExpiration;
    bool m_licenseExpirationHasBeenSet = false;

    LicenseType m_licenseType;
    bool m_licenseTypeHasBeenSet = false;

    Aws::Utils::DateTime m_modified;
    bool m_modifiedHasBeenSet = false;

    Aws::String m_name;
    bool m_nameHasBeenSet = false;

    NetworkAccessConfiguration m_networkAccessControl;
    bool m_networkAccessControlHasBeenSet = false;

    Aws::Vector<NotificationDestinationType> m_notificationDestinations;
    bool m_notificationDestinationsHasBeenSet = false;

    Aws::String m_organizationRoleName;
    bool m_organizationRoleNameHasBeenSet = false;

    Aws::Vector<Aws::String> m_organizationalUnits;
    bool m_organizationalUnitsHasBeenSet = false;

    PermissionType m_permissionType;
    bool m_permissionTypeHasBeenSet = false;

    Aws::String m_stackSetName;
    bool m_stackSetNameHasBeenSet = false;

    WorkspaceStatus m_status;
    bool m_statusHasBeenSet = false;

    Aws::Map<Aws::String, Aws::String> m_tags;
    bool m_tagsHasBeenSet = false;

    VpcConfiguration m_vpcConfiguration;
    bool m_vpcConfigurationHasBeenSet = false;

    Aws::String m_workspaceRoleArn;
    bool m_workspaceRoleArnHasBeenSet = false;
  };

} // namespace Model
} // namespace ManagedGrafana
} // namespace Aws