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

#pragma once
#include <aws/core/utils/memory/stl/AWSString.h>
#include <aws/core/utils/memory/stl/AWSVector.h>
#include <aws/serverlessrepo/ServerlessApplicationRepository_EXPORTS.h>

#include <utility>

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

/**
 * <p>Summary of details about the application.</p><p><h3>See Also:</h3>   <a
 * href="http://docs.aws.amazon.com/goto/WebAPI/serverlessrepo-2017-09-08/ApplicationSummary">AWS
 * API Reference</a></p>
 */
class ApplicationSummary {
 public:
  AWS_SERVERLESSAPPLICATIONREPOSITORY_API ApplicationSummary() = default;
  AWS_SERVERLESSAPPLICATIONREPOSITORY_API ApplicationSummary(Aws::Utils::Json::JsonView jsonValue);
  AWS_SERVERLESSAPPLICATIONREPOSITORY_API ApplicationSummary& operator=(Aws::Utils::Json::JsonView jsonValue);
  AWS_SERVERLESSAPPLICATIONREPOSITORY_API Aws::Utils::Json::JsonValue Jsonize() const;

  ///@{
  /**
   * <p>The application Amazon Resource Name (ARN).</p>
   */
  inline const Aws::String& GetApplicationId() const { return m_applicationId; }
  inline bool ApplicationIdHasBeenSet() const { return m_applicationIdHasBeenSet; }
  template <typename ApplicationIdT = Aws::String>
  void SetApplicationId(ApplicationIdT&& value) {
    m_applicationIdHasBeenSet = true;
    m_applicationId = std::forward<ApplicationIdT>(value);
  }
  template <typename ApplicationIdT = Aws::String>
  ApplicationSummary& WithApplicationId(ApplicationIdT&& value) {
    SetApplicationId(std::forward<ApplicationIdT>(value));
    return *this;
  }
  ///@}

  ///@{
  /**
   * <p>The name of the author publishing the app.</p><p>Minimum length=1. Maximum
   * length=127.</p><p>Pattern "^[a-z0-9](([a-z0-9]|-(?!-))*[a-z0-9])?$";</p>
   */
  inline const Aws::String& GetAuthor() const { return m_author; }
  inline bool AuthorHasBeenSet() const { return m_authorHasBeenSet; }
  template <typename AuthorT = Aws::String>
  void SetAuthor(AuthorT&& value) {
    m_authorHasBeenSet = true;
    m_author = std::forward<AuthorT>(value);
  }
  template <typename AuthorT = Aws::String>
  ApplicationSummary& WithAuthor(AuthorT&& value) {
    SetAuthor(std::forward<AuthorT>(value));
    return *this;
  }
  ///@}

  ///@{
  /**
   * <p>The date and time this resource was created.</p>
   */
  inline const Aws::String& GetCreationTime() const { return m_creationTime; }
  inline bool CreationTimeHasBeenSet() const { return m_creationTimeHasBeenSet; }
  template <typename CreationTimeT = Aws::String>
  void SetCreationTime(CreationTimeT&& value) {
    m_creationTimeHasBeenSet = true;
    m_creationTime = std::forward<CreationTimeT>(value);
  }
  template <typename CreationTimeT = Aws::String>
  ApplicationSummary& WithCreationTime(CreationTimeT&& value) {
    SetCreationTime(std::forward<CreationTimeT>(value));
    return *this;
  }
  ///@}

  ///@{
  /**
   * <p>The description of the application.</p><p>Minimum length=1. Maximum
   * length=256</p>
   */
  inline const Aws::String& GetDescription() const { return m_description; }
  inline bool DescriptionHasBeenSet() const { return m_descriptionHasBeenSet; }
  template <typename DescriptionT = Aws::String>
  void SetDescription(DescriptionT&& value) {
    m_descriptionHasBeenSet = true;
    m_description = std::forward<DescriptionT>(value);
  }
  template <typename DescriptionT = Aws::String>
  ApplicationSummary& WithDescription(DescriptionT&& value) {
    SetDescription(std::forward<DescriptionT>(value));
    return *this;
  }
  ///@}

  ///@{
  /**
   * <p>A URL with more information about the application, for example the location
   * of your GitHub repository for the application.</p>
   */
  inline const Aws::String& GetHomePageUrl() const { return m_homePageUrl; }
  inline bool HomePageUrlHasBeenSet() const { return m_homePageUrlHasBeenSet; }
  template <typename HomePageUrlT = Aws::String>
  void SetHomePageUrl(HomePageUrlT&& value) {
    m_homePageUrlHasBeenSet = true;
    m_homePageUrl = std::forward<HomePageUrlT>(value);
  }
  template <typename HomePageUrlT = Aws::String>
  ApplicationSummary& WithHomePageUrl(HomePageUrlT&& value) {
    SetHomePageUrl(std::forward<HomePageUrlT>(value));
    return *this;
  }
  ///@}

  ///@{
  /**
   * <p>Labels to improve discovery of apps in search results.</p><p>Minimum
   * length=1. Maximum length=127. Maximum number of labels: 10</p><p>Pattern:
   * "^[a-zA-Z0-9+\\-_:\\/@]+$";</p>
   */
  inline const Aws::Vector<Aws::String>& GetLabels() const { return m_labels; }
  inline bool LabelsHasBeenSet() const { return m_labelsHasBeenSet; }
  template <typename LabelsT = Aws::Vector<Aws::String>>
  void SetLabels(LabelsT&& value) {
    m_labelsHasBeenSet = true;
    m_labels = std::forward<LabelsT>(value);
  }
  template <typename LabelsT = Aws::Vector<Aws::String>>
  ApplicationSummary& WithLabels(LabelsT&& value) {
    SetLabels(std::forward<LabelsT>(value));
    return *this;
  }
  template <typename LabelsT = Aws::String>
  ApplicationSummary& AddLabels(LabelsT&& value) {
    m_labelsHasBeenSet = true;
    m_labels.emplace_back(std::forward<LabelsT>(value));
    return *this;
  }
  ///@}

  ///@{
  /**
   * <p>The name of the application.</p><p>Minimum length=1. Maximum
   * length=140</p><p>Pattern: "[a-zA-Z0-9\\-]+";</p>
   */
  inline const Aws::String& GetName() const { return m_name; }
  inline bool NameHasBeenSet() const { return m_nameHasBeenSet; }
  template <typename NameT = Aws::String>
  void SetName(NameT&& value) {
    m_nameHasBeenSet = true;
    m_name = std::forward<NameT>(value);
  }
  template <typename NameT = Aws::String>
  ApplicationSummary& WithName(NameT&& value) {
    SetName(std::forward<NameT>(value));
    return *this;
  }
  ///@}

  ///@{
  /**
   * <p>A valid identifier from <a
   * href="https://spdx.org/licenses/">https://spdx.org/licenses/</a>.</p>
   */
  inline const Aws::String& GetSpdxLicenseId() const { return m_spdxLicenseId; }
  inline bool SpdxLicenseIdHasBeenSet() const { return m_spdxLicenseIdHasBeenSet; }
  template <typename SpdxLicenseIdT = Aws::String>
  void SetSpdxLicenseId(SpdxLicenseIdT&& value) {
    m_spdxLicenseIdHasBeenSet = true;
    m_spdxLicenseId = std::forward<SpdxLicenseIdT>(value);
  }
  template <typename SpdxLicenseIdT = Aws::String>
  ApplicationSummary& WithSpdxLicenseId(SpdxLicenseIdT&& value) {
    SetSpdxLicenseId(std::forward<SpdxLicenseIdT>(value));
    return *this;
  }
  ///@}
 private:
  Aws::String m_applicationId;

  Aws::String m_author;

  Aws::String m_creationTime;

  Aws::String m_description;

  Aws::String m_homePageUrl;

  Aws::Vector<Aws::String> m_labels;

  Aws::String m_name;

  Aws::String m_spdxLicenseId;
  bool m_applicationIdHasBeenSet = false;
  bool m_authorHasBeenSet = false;
  bool m_creationTimeHasBeenSet = false;
  bool m_descriptionHasBeenSet = false;
  bool m_homePageUrlHasBeenSet = false;
  bool m_labelsHasBeenSet = false;
  bool m_nameHasBeenSet = false;
  bool m_spdxLicenseIdHasBeenSet = false;
};

}  // namespace Model
}  // namespace ServerlessApplicationRepository
}  // namespace Aws
