/*
 * 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 kms-2014-11-01.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.KeyManagementService.Model
{
    /// 
    /// Container for the parameters to the ListGrants operation.
    /// Gets a list of all grants for the specified KMS key. 
    /// 
    ///  
    /// 
    /// You must specify the KMS key in all requests. You can filter the grant list by grant
    /// ID or grantee principal.
    /// 
    ///  
    /// 
    /// For detailed information about grants, including grant terminology, see Grants
    /// in KMS in the  Key Management Service Developer Guide . For examples
    /// of working with grants in several programming languages, see Programming
    /// grants. 
    /// 
    ///   
    /// 
    /// The GranteePrincipal field in the ListGrants response usually
    /// contains the user or role designated as the grantee principal in the grant. However,
    /// when the grantee principal in the grant is an Amazon Web Services service, the GranteePrincipal
    /// field contains the service
    /// principal, which might represent several different grantee principals.
    /// 
    ///   
    /// 
    ///  Cross-account use: Yes. To perform this operation on a KMS key in a different
    /// Amazon Web Services account, specify the key ARN in the value of the KeyId
    /// parameter.
    /// 
    ///  
    /// 
    ///  Required permissions: kms:ListGrants
    /// (key policy)
    /// 
    ///  
    /// 
    ///  Related operations: 
    /// 
    ///  
    /// 
    public partial class ListGrantsRequest : AmazonKeyManagementServiceRequest
    {
        private string _granteePrincipal;
        private string _grantId;
        private string _keyId;
        private int? _limit;
        private string _marker;
        /// 
        /// Gets and sets the property GranteePrincipal. 
        /// 
        /// Returns only grants where the specified principal is the grantee principal for the
        /// grant.
        /// 
        /// 
        [AWSProperty(Min=1, Max=256)]
        public string GranteePrincipal
        {
            get { return this._granteePrincipal; }
            set { this._granteePrincipal = value; }
        }
        // Check to see if GranteePrincipal property is set
        internal bool IsSetGranteePrincipal()
        {
            return this._granteePrincipal != null;
        }
        /// 
        /// Gets and sets the property GrantId. 
        /// 
        /// Returns only the grant with the specified grant ID. The grant ID uniquely identifies
        /// the grant. 
        /// 
        /// 
        [AWSProperty(Min=1, Max=128)]
        public string GrantId
        {
            get { return this._grantId; }
            set { this._grantId = value; }
        }
        // Check to see if GrantId property is set
        internal bool IsSetGrantId()
        {
            return this._grantId != null;
        }
        /// 
        /// Gets and sets the property KeyId. 
        /// 
        /// Returns only grants for the specified KMS key. This parameter is required.
        /// 
        ///  
        /// 
        /// Specify the key ID or key ARN of the KMS key. To specify a KMS key in a different
        /// Amazon Web Services account, you must use the key ARN.
        /// 
        ///  
        /// 
        /// For example:
        /// 
        ///   -  
        /// 
        /// Key ID: 1234abcd-12ab-34cd-56ef-1234567890ab/// 
        ///
-  
        /// 
        /// Key ARN: arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab/// 
        /// 
        ///
/// 
        /// To get the key ID and key ARN for a KMS key, use ListKeys or DescribeKey.
        /// 
        /// 
        [AWSProperty(Required=true, Min=1, Max=2048)]
        public string KeyId
        {
            get { return this._keyId; }
            set { this._keyId = value; }
        }
        // Check to see if KeyId property is set
        internal bool IsSetKeyId()
        {
            return this._keyId != null;
        }
        /// 
        /// Gets and sets the property Limit. 
        /// 
        /// Use this parameter to specify the maximum number of items to return. When this value
        /// is present, KMS does not return more than the specified number of items, but it might
        /// return fewer.
        /// 
        ///  
        /// 
        /// This value is optional. If you include a value, it must be between 1 and 100, inclusive.
        /// If you do not include a value, it defaults to 50.
        /// 
        /// 
        [AWSProperty(Min=1, Max=1000)]
        public int Limit
        {
            get { return this._limit.GetValueOrDefault(); }
            set { this._limit = value; }
        }
        // Check to see if Limit property is set
        internal bool IsSetLimit()
        {
            return this._limit.HasValue; 
        }
        /// 
        /// Gets and sets the property Marker. 
        /// 
        /// Use this parameter in a subsequent request after you receive a response with truncated
        /// results. Set it to the value ofNextMarker from the truncated response
        /// you just received.
        /// 
        /// 
        [AWSProperty(Min=1, Max=1024)]
        public string Marker
        {
            get { return this._marker; }
            set { this._marker = value; }
        }
        // Check to see if Marker property is set
        internal bool IsSetMarker()
        {
            return this._marker != null;
        }
    }
}