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

#pragma once
#include <aws/datasync/DataSync_EXPORTS.h>
#include <aws/datasync/model/IOPS.h>
#include <aws/datasync/model/Throughput.h>
#include <aws/datasync/model/Latency.h>
#include <utility>

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

  /**
   * <p>The types of performance data that DataSync Discovery collects about an
   * on-premises storage system resource.</p><p><h3>See Also:</h3>   <a
   * href="http://docs.aws.amazon.com/goto/WebAPI/datasync-2018-11-09/P95Metrics">AWS
   * API Reference</a></p>
   */
  class P95Metrics
  {
  public:
    AWS_DATASYNC_API P95Metrics();
    AWS_DATASYNC_API P95Metrics(Aws::Utils::Json::JsonView jsonValue);
    AWS_DATASYNC_API P95Metrics& operator=(Aws::Utils::Json::JsonView jsonValue);
    AWS_DATASYNC_API Aws::Utils::Json::JsonValue Jsonize() const;


    /**
     * <p>The IOPS peaks for an on-premises storage system resource. Each data point
     * represents the 95th percentile peak value during a 1-hour interval.</p>
     */
    inline const IOPS& GetIOPS() const{ return m_iOPS; }

    /**
     * <p>The IOPS peaks for an on-premises storage system resource. Each data point
     * represents the 95th percentile peak value during a 1-hour interval.</p>
     */
    inline bool IOPSHasBeenSet() const { return m_iOPSHasBeenSet; }

    /**
     * <p>The IOPS peaks for an on-premises storage system resource. Each data point
     * represents the 95th percentile peak value during a 1-hour interval.</p>
     */
    inline void SetIOPS(const IOPS& value) { m_iOPSHasBeenSet = true; m_iOPS = value; }

    /**
     * <p>The IOPS peaks for an on-premises storage system resource. Each data point
     * represents the 95th percentile peak value during a 1-hour interval.</p>
     */
    inline void SetIOPS(IOPS&& value) { m_iOPSHasBeenSet = true; m_iOPS = std::move(value); }

    /**
     * <p>The IOPS peaks for an on-premises storage system resource. Each data point
     * represents the 95th percentile peak value during a 1-hour interval.</p>
     */
    inline P95Metrics& WithIOPS(const IOPS& value) { SetIOPS(value); return *this;}

    /**
     * <p>The IOPS peaks for an on-premises storage system resource. Each data point
     * represents the 95th percentile peak value during a 1-hour interval.</p>
     */
    inline P95Metrics& WithIOPS(IOPS&& value) { SetIOPS(std::move(value)); return *this;}


    /**
     * <p>The throughput peaks for an on-premises storage system resource. Each data
     * point represents the 95th percentile peak value during a 1-hour interval.</p>
     */
    inline const Throughput& GetThroughput() const{ return m_throughput; }

    /**
     * <p>The throughput peaks for an on-premises storage system resource. Each data
     * point represents the 95th percentile peak value during a 1-hour interval.</p>
     */
    inline bool ThroughputHasBeenSet() const { return m_throughputHasBeenSet; }

    /**
     * <p>The throughput peaks for an on-premises storage system resource. Each data
     * point represents the 95th percentile peak value during a 1-hour interval.</p>
     */
    inline void SetThroughput(const Throughput& value) { m_throughputHasBeenSet = true; m_throughput = value; }

    /**
     * <p>The throughput peaks for an on-premises storage system resource. Each data
     * point represents the 95th percentile peak value during a 1-hour interval.</p>
     */
    inline void SetThroughput(Throughput&& value) { m_throughputHasBeenSet = true; m_throughput = std::move(value); }

    /**
     * <p>The throughput peaks for an on-premises storage system resource. Each data
     * point represents the 95th percentile peak value during a 1-hour interval.</p>
     */
    inline P95Metrics& WithThroughput(const Throughput& value) { SetThroughput(value); return *this;}

    /**
     * <p>The throughput peaks for an on-premises storage system resource. Each data
     * point represents the 95th percentile peak value during a 1-hour interval.</p>
     */
    inline P95Metrics& WithThroughput(Throughput&& value) { SetThroughput(std::move(value)); return *this;}


    /**
     * <p>The latency peaks for an on-premises storage system resource. Each data point
     * represents the 95th percentile peak value during a 1-hour interval.</p>
     */
    inline const Latency& GetLatency() const{ return m_latency; }

    /**
     * <p>The latency peaks for an on-premises storage system resource. Each data point
     * represents the 95th percentile peak value during a 1-hour interval.</p>
     */
    inline bool LatencyHasBeenSet() const { return m_latencyHasBeenSet; }

    /**
     * <p>The latency peaks for an on-premises storage system resource. Each data point
     * represents the 95th percentile peak value during a 1-hour interval.</p>
     */
    inline void SetLatency(const Latency& value) { m_latencyHasBeenSet = true; m_latency = value; }

    /**
     * <p>The latency peaks for an on-premises storage system resource. Each data point
     * represents the 95th percentile peak value during a 1-hour interval.</p>
     */
    inline void SetLatency(Latency&& value) { m_latencyHasBeenSet = true; m_latency = std::move(value); }

    /**
     * <p>The latency peaks for an on-premises storage system resource. Each data point
     * represents the 95th percentile peak value during a 1-hour interval.</p>
     */
    inline P95Metrics& WithLatency(const Latency& value) { SetLatency(value); return *this;}

    /**
     * <p>The latency peaks for an on-premises storage system resource. Each data point
     * represents the 95th percentile peak value during a 1-hour interval.</p>
     */
    inline P95Metrics& WithLatency(Latency&& value) { SetLatency(std::move(value)); return *this;}

  private:

    IOPS m_iOPS;
    bool m_iOPSHasBeenSet = false;

    Throughput m_throughput;
    bool m_throughputHasBeenSet = false;

    Latency m_latency;
    bool m_latencyHasBeenSet = false;
  };

} // namespace Model
} // namespace DataSync
} // namespace Aws