/*
 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License").
 * You may not use this file except in compliance with the License.
 * A copy of the License is located at
 * 
 *  http://aws.amazon.com/apache2.0
 * 
 * or in the "license" file accompanying this file. This file is distributed
 * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
 * express or implied. See the License for the specific language governing
 * permissions and limitations under the License.
 */
/*
 * Do not modify this file. This file is generated from the kinesis-2013-12-02.normal.json service model.
 */
using System;
using System.Collections.Generic;
using System.Xml.Serialization;
using System.Text;
using System.IO;
using System.Net;
using Amazon.Runtime;
using Amazon.Runtime.Internal;
namespace Amazon.Kinesis.Model
{
    /// 
    /// Container for the parameters to the ListShards operation.
    /// Lists the shards in a stream and provides information about each shard. This operation
    /// has a limit of 1000 transactions per second per data stream.
    /// 
    ///   
    /// 
    /// When invoking this API, it is recommended you use the StreamARN input
    /// parameter rather than the StreamName input parameter.
    /// 
    ///   
    /// 
    /// This action does not list expired shards. For information about expired shards, see
    /// Data
    /// Routing, Data Persistence, and Shard State after a Reshard. 
    /// 
    ///   
    /// 
    /// This API is a new operation that is used by the Amazon Kinesis Client Library (KCL).
    /// If you have a fine-grained IAM policy that only allows specific operations, you must
    /// update your policy to allow calls to this API. For more information, see Controlling
    /// Access to Amazon Kinesis Data Streams Resources Using IAM.
    /// 
    ///  
    /// 
    public partial class ListShardsRequest : AmazonKinesisRequest
    {
        private string _exclusiveStartShardId;
        private int? _maxResults;
        private string _nextToken;
        private ShardFilter _shardFilter;
        private string _streamARN;
        private DateTime? _streamCreationTimestamp;
        private string _streamName;
        /// 
        /// Gets and sets the property ExclusiveStartShardId. 
        /// 
        /// Specify this parameter to indicate that you want to list the shards starting with
        /// the shard whose ID immediately follows ExclusiveStartShardId.
        /// 
        ///  
        /// 
        /// If you don't specify this parameter, the default behavior is for ListShards
        /// to list the shards starting with the first one in the stream.
        /// 
        ///  
        /// 
        /// You cannot specify this parameter if you specify NextToken.
        /// 
        /// 
        [AWSProperty(Min=1, Max=128)]
        public string ExclusiveStartShardId
        {
            get { return this._exclusiveStartShardId; }
            set { this._exclusiveStartShardId = value; }
        }
        // Check to see if ExclusiveStartShardId property is set
        internal bool IsSetExclusiveStartShardId()
        {
            return this._exclusiveStartShardId != null;
        }
        /// 
        /// Gets and sets the property MaxResults. 
        /// 
        /// The maximum number of shards to return in a single call to ListShards.
        /// The maximum number of shards to return in a single call. The default value is 1000.
        /// If you specify a value greater than 1000, at most 1000 results are returned. 
        /// 
        ///  
        /// 
        /// When the number of shards to be listed is greater than the value of MaxResults,
        /// the response contains a NextToken value that you can use in a subsequent
        /// call to ListShards to list the next set of shards.
        /// 
        /// 
        [AWSProperty(Min=1, Max=10000)]
        public int MaxResults
        {
            get { return this._maxResults.GetValueOrDefault(); }
            set { this._maxResults = value; }
        }
        // Check to see if MaxResults property is set
        internal bool IsSetMaxResults()
        {
            return this._maxResults.HasValue; 
        }
        /// 
        /// Gets and sets the property NextToken. 
        /// 
        /// When the number of shards in the data stream is greater than the default value for
        /// the MaxResults parameter, or if you explicitly specify a value for MaxResults
        /// that is less than the number of shards in the data stream, the response includes a
        /// pagination token named NextToken. You can specify this NextToken
        /// value in a subsequent call to ListShards to list the next set of shards.
        /// 
        ///  
        /// 
        /// Don't specify StreamName or StreamCreationTimestamp if you
        /// specify NextToken because the latter unambiguously identifies the stream.
        /// 
        ///  
        /// 
        /// You can optionally specify a value for the MaxResults parameter when
        /// you specify NextToken. If you specify a MaxResults value
        /// that is less than the number of shards that the operation returns if you don't specify
        /// MaxResults, the response will contain a new NextToken value.
        /// You can use the new NextToken value in a subsequent call to the ListShards
        /// operation.
        /// 
        ///   
        /// 
        /// Tokens expire after 300 seconds. When you obtain a value for NextToken
        /// in the response to a call to ListShards, you have 300 seconds to use
        /// that value. If you specify an expired token in a call to ListShards,
        /// you get ExpiredNextTokenException.
        /// 
        ///  
        /// 
        [AWSProperty(Min=1, Max=1048576)]
        public string NextToken
        {
            get { return this._nextToken; }
            set { this._nextToken = value; }
        }
        // Check to see if NextToken property is set
        internal bool IsSetNextToken()
        {
            return this._nextToken != null;
        }
        /// 
        /// Gets and sets the property ShardFilter. 
        /// 
        /// Enables you to filter out the response of the ListShards API. You can
        /// only specify one filter at a time. 
        /// 
        ///  
        /// 
        /// If you use the ShardFilter parameter when invoking the ListShards API,
        /// the Type is the required property and must be specified. If you specify
        /// the AT_TRIM_HORIZON, FROM_TRIM_HORIZON, or AT_LATEST
        /// types, you do not need to specify either the ShardId or the Timestamp
        /// optional properties. 
        /// 
        ///  
        /// 
        /// If you specify the AFTER_SHARD_ID type, you must also provide the value
        /// for the optional ShardId property. The ShardId property
        /// is identical in fuctionality to the ExclusiveStartShardId parameter of
        /// the ListShards API. When ShardId property is specified,
        /// the response includes the shards starting with the shard whose ID immediately follows
        /// the ShardId that you provided. 
        /// 
        ///  
        /// 
        /// If you specify the AT_TIMESTAMP or FROM_TIMESTAMP_ID type,
        /// you must also provide the value for the optional Timestamp property.
        /// If you specify the AT_TIMESTAMP type, then all shards that were open at the provided
        /// timestamp are returned. If you specify the FROM_TIMESTAMP type, then all shards starting
        /// from the provided timestamp to TIP are returned. 
        /// 
        /// 
        public ShardFilter ShardFilter
        {
            get { return this._shardFilter; }
            set { this._shardFilter = value; }
        }
        // Check to see if ShardFilter property is set
        internal bool IsSetShardFilter()
        {
            return this._shardFilter != null;
        }
        /// 
        /// Gets and sets the property StreamARN. 
        /// 
        /// The ARN of the stream.
        /// 
        /// 
        [AWSProperty(Min=1, Max=2048)]
        public string StreamARN
        {
            get { return this._streamARN; }
            set { this._streamARN = value; }
        }
        // Check to see if StreamARN property is set
        internal bool IsSetStreamARN()
        {
            return this._streamARN != null;
        }
        /// 
        /// Gets and sets the property StreamCreationTimestamp. 
        /// 
        /// Specify this input parameter to distinguish data streams that have the same name.
        /// For example, if you create a data stream and then delete it, and you later create
        /// another data stream with the same name, you can use this input parameter to specify
        /// which of the two streams you want to list the shards for.
        /// 
        ///  
        /// 
        /// You cannot specify this parameter if you specify the NextToken parameter.
        /// 
        /// 
        public DateTime StreamCreationTimestamp
        {
            get { return this._streamCreationTimestamp.GetValueOrDefault(); }
            set { this._streamCreationTimestamp = value; }
        }
        // Check to see if StreamCreationTimestamp property is set
        internal bool IsSetStreamCreationTimestamp()
        {
            return this._streamCreationTimestamp.HasValue; 
        }
        /// 
        /// Gets and sets the property StreamName. 
        /// 
        /// The name of the data stream whose shards you want to list. 
        /// 
        ///  
        /// 
        /// You cannot specify this parameter if you specify the NextToken parameter.
        /// 
        /// 
        [AWSProperty(Min=1, Max=128)]
        public string StreamName
        {
            get { return this._streamName; }
            set { this._streamName = value; }
        }
        // Check to see if StreamName property is set
        internal bool IsSetStreamName()
        {
            return this._streamName != null;
        }
    }
}