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

#pragma once
#include <aws/cloudtrail/CloudTrail_EXPORTS.h>
#include <aws/core/utils/memory/stl/AWSString.h>
#include <aws/cloudtrail/model/SourceConfig.h>
#include <aws/core/utils/memory/stl/AWSVector.h>
#include <aws/cloudtrail/model/IngestionStatus.h>
#include <aws/cloudtrail/model/Destination.h>
#include <utility>

namespace Aws
{
template<typename RESULT_TYPE>
class AmazonWebServiceResult;

namespace Utils
{
namespace Json
{
  class JsonValue;
} // namespace Json
} // namespace Utils
namespace CloudTrail
{
namespace Model
{
  class GetChannelResult
  {
  public:
    AWS_CLOUDTRAIL_API GetChannelResult();
    AWS_CLOUDTRAIL_API GetChannelResult(const Aws::AmazonWebServiceResult<Aws::Utils::Json::JsonValue>& result);
    AWS_CLOUDTRAIL_API GetChannelResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Json::JsonValue>& result);


    ///@{
    /**
     * <p>The ARN of an channel returned by a <code>GetChannel</code> request.</p>
     */
    inline const Aws::String& GetChannelArn() const{ return m_channelArn; }
    inline void SetChannelArn(const Aws::String& value) { m_channelArn = value; }
    inline void SetChannelArn(Aws::String&& value) { m_channelArn = std::move(value); }
    inline void SetChannelArn(const char* value) { m_channelArn.assign(value); }
    inline GetChannelResult& WithChannelArn(const Aws::String& value) { SetChannelArn(value); return *this;}
    inline GetChannelResult& WithChannelArn(Aws::String&& value) { SetChannelArn(std::move(value)); return *this;}
    inline GetChannelResult& WithChannelArn(const char* value) { SetChannelArn(value); return *this;}
    ///@}

    ///@{
    /**
     * <p> The name of the CloudTrail channel. For service-linked channels, the name is
     * <code>aws-service-channel/service-name/custom-suffix</code> where
     * <code>service-name</code> represents the name of the Amazon Web Services service
     * that created the channel and <code>custom-suffix</code> represents the suffix
     * generated by the Amazon Web Services service. </p>
     */
    inline const Aws::String& GetName() const{ return m_name; }
    inline void SetName(const Aws::String& value) { m_name = value; }
    inline void SetName(Aws::String&& value) { m_name = std::move(value); }
    inline void SetName(const char* value) { m_name.assign(value); }
    inline GetChannelResult& WithName(const Aws::String& value) { SetName(value); return *this;}
    inline GetChannelResult& WithName(Aws::String&& value) { SetName(std::move(value)); return *this;}
    inline GetChannelResult& WithName(const char* value) { SetName(value); return *this;}
    ///@}

    ///@{
    /**
     * <p>The source for the CloudTrail channel.</p>
     */
    inline const Aws::String& GetSource() const{ return m_source; }
    inline void SetSource(const Aws::String& value) { m_source = value; }
    inline void SetSource(Aws::String&& value) { m_source = std::move(value); }
    inline void SetSource(const char* value) { m_source.assign(value); }
    inline GetChannelResult& WithSource(const Aws::String& value) { SetSource(value); return *this;}
    inline GetChannelResult& WithSource(Aws::String&& value) { SetSource(std::move(value)); return *this;}
    inline GetChannelResult& WithSource(const char* value) { SetSource(value); return *this;}
    ///@}

    ///@{
    /**
     * <p> Provides information about the advanced event selectors configured for the
     * channel, and whether the channel applies to all Regions or a single Region. </p>
     */
    inline const SourceConfig& GetSourceConfig() const{ return m_sourceConfig; }
    inline void SetSourceConfig(const SourceConfig& value) { m_sourceConfig = value; }
    inline void SetSourceConfig(SourceConfig&& value) { m_sourceConfig = std::move(value); }
    inline GetChannelResult& WithSourceConfig(const SourceConfig& value) { SetSourceConfig(value); return *this;}
    inline GetChannelResult& WithSourceConfig(SourceConfig&& value) { SetSourceConfig(std::move(value)); return *this;}
    ///@}

    ///@{
    /**
     * <p>The destinations for the channel. For channels created for integrations, the
     * destinations are the event data stores that log events arriving through the
     * channel. For service-linked channels, the destination is the Amazon Web Services
     * service that created the service-linked channel to receive events.</p>
     */
    inline const Aws::Vector<Destination>& GetDestinations() const{ return m_destinations; }
    inline void SetDestinations(const Aws::Vector<Destination>& value) { m_destinations = value; }
    inline void SetDestinations(Aws::Vector<Destination>&& value) { m_destinations = std::move(value); }
    inline GetChannelResult& WithDestinations(const Aws::Vector<Destination>& value) { SetDestinations(value); return *this;}
    inline GetChannelResult& WithDestinations(Aws::Vector<Destination>&& value) { SetDestinations(std::move(value)); return *this;}
    inline GetChannelResult& AddDestinations(const Destination& value) { m_destinations.push_back(value); return *this; }
    inline GetChannelResult& AddDestinations(Destination&& value) { m_destinations.push_back(std::move(value)); return *this; }
    ///@}

    ///@{
    /**
     * <p>A table showing information about the most recent successful and failed
     * attempts to ingest events.</p>
     */
    inline const IngestionStatus& GetIngestionStatus() const{ return m_ingestionStatus; }
    inline void SetIngestionStatus(const IngestionStatus& value) { m_ingestionStatus = value; }
    inline void SetIngestionStatus(IngestionStatus&& value) { m_ingestionStatus = std::move(value); }
    inline GetChannelResult& WithIngestionStatus(const IngestionStatus& value) { SetIngestionStatus(value); return *this;}
    inline GetChannelResult& WithIngestionStatus(IngestionStatus&& value) { SetIngestionStatus(std::move(value)); return *this;}
    ///@}

    ///@{
    
    inline const Aws::String& GetRequestId() const{ return m_requestId; }
    inline void SetRequestId(const Aws::String& value) { m_requestId = value; }
    inline void SetRequestId(Aws::String&& value) { m_requestId = std::move(value); }
    inline void SetRequestId(const char* value) { m_requestId.assign(value); }
    inline GetChannelResult& WithRequestId(const Aws::String& value) { SetRequestId(value); return *this;}
    inline GetChannelResult& WithRequestId(Aws::String&& value) { SetRequestId(std::move(value)); return *this;}
    inline GetChannelResult& WithRequestId(const char* value) { SetRequestId(value); return *this;}
    ///@}
  private:

    Aws::String m_channelArn;

    Aws::String m_name;

    Aws::String m_source;

    SourceConfig m_sourceConfig;

    Aws::Vector<Destination> m_destinations;

    IngestionStatus m_ingestionStatus;

    Aws::String m_requestId;
  };

} // namespace Model
} // namespace CloudTrail
} // namespace Aws
