/*
 * 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 billingconductor-2021-07-30.normal.json service model.
 */
using System;
using System.Runtime.ExceptionServices;
using System.Threading;
using System.Threading.Tasks;
using System.Collections.Generic;
using System.Net;
using Amazon.BillingConductor.Model;
using Amazon.BillingConductor.Model.Internal.MarshallTransformations;
using Amazon.BillingConductor.Internal;
using Amazon.Runtime;
using Amazon.Runtime.Internal;
using Amazon.Runtime.Internal.Auth;
using Amazon.Runtime.Internal.Transform;
namespace Amazon.BillingConductor
{
    /// 
    /// Implementation for accessing BillingConductor
    ///
    /// Amazon Web Services Billing Conductor is a fully managed service that you can use
    /// to customize a pro
    /// forma version of your billing data each month, to accurately show or chargeback
    /// your end customers. Amazon Web Services Billing Conductor doesn't change the way you're
    /// billed by Amazon Web Services each month by design. Instead, it provides you with
    /// a mechanism to configure, generate, and display rates to certain customers over a
    /// given billing period. You can also analyze the difference between the rates you apply
    /// to your accounting groupings relative to your actual rates from Amazon Web Services.
    /// As a result of your Amazon Web Services Billing Conductor configuration, the payer
    /// account can also see the custom rate applied on the billing details page of the Amazon Web Services Billing console,
    /// or configure a cost and usage report per billing group.
    /// 
    ///  
    /// 
    /// This documentation shows how you can configure Amazon Web Services Billing Conductor
    /// using its API. For more information about using the Amazon
    /// Web Services Billing Conductor user interface, see the 
    /// Amazon Web Services Billing Conductor User Guide.
    /// 
    /// 
    public partial class AmazonBillingConductorClient : AmazonServiceClient, IAmazonBillingConductor
    {
        private static IServiceMetadata serviceMetadata = new AmazonBillingConductorMetadata();
        
        #region Constructors
        /// 
        /// Constructs AmazonBillingConductorClient with the credentials loaded from the application's
        /// default configuration, and if unsuccessful from the Instance Profile service on an EC2 instance.
        /// 
        /// Example App.config with credentials set. 
        /// 
        /// <?xml version="1.0" encoding="utf-8" ?>
        /// <configuration>
        ///     <appSettings>
        ///         <add key="AWSProfileName" value="AWS Default"/>
        ///     </appSettings>
        /// </configuration>
        /// 
        ///
        /// 
        public AmazonBillingConductorClient()
            : base(FallbackCredentialsFactory.GetCredentials(), new AmazonBillingConductorConfig()) { }
        /// 
        /// Constructs AmazonBillingConductorClient with the credentials loaded from the application's
        /// default configuration, and if unsuccessful from the Instance Profile service on an EC2 instance.
        /// 
        /// Example App.config with credentials set. 
        /// 
        /// <?xml version="1.0" encoding="utf-8" ?>
        /// <configuration>
        ///     <appSettings>
        ///         <add key="AWSProfileName" value="AWS Default"/>
        ///     </appSettings>
        /// </configuration>
        /// 
        ///
        /// 
        /// The region to connect.
        public AmazonBillingConductorClient(RegionEndpoint region)
            : base(FallbackCredentialsFactory.GetCredentials(), new AmazonBillingConductorConfig{RegionEndpoint = region}) { }
        /// 
        /// Constructs AmazonBillingConductorClient with the credentials loaded from the application's
        /// default configuration, and if unsuccessful from the Instance Profile service on an EC2 instance.
        /// 
        /// Example App.config with credentials set. 
        /// 
        /// <?xml version="1.0" encoding="utf-8" ?>
        /// <configuration>
        ///     <appSettings>
        ///         <add key="AWSProfileName" value="AWS Default"/>
        ///     </appSettings>
        /// </configuration>
        /// 
        ///
        /// 
        /// The AmazonBillingConductorClient Configuration Object
        public AmazonBillingConductorClient(AmazonBillingConductorConfig config)
            : base(FallbackCredentialsFactory.GetCredentials(config), config){}
        /// 
        /// Constructs AmazonBillingConductorClient with AWS Credentials
        /// 
        /// AWS Credentials
        public AmazonBillingConductorClient(AWSCredentials credentials)
            : this(credentials, new AmazonBillingConductorConfig())
        {
        }
        /// 
        /// Constructs AmazonBillingConductorClient with AWS Credentials
        /// 
        /// AWS Credentials
        /// The region to connect.
        public AmazonBillingConductorClient(AWSCredentials credentials, RegionEndpoint region)
            : this(credentials, new AmazonBillingConductorConfig{RegionEndpoint = region})
        {
        }
        /// 
        /// Constructs AmazonBillingConductorClient with AWS Credentials and an
        /// AmazonBillingConductorClient Configuration object.
        /// 
        /// AWS Credentials
        /// The AmazonBillingConductorClient Configuration Object
        public AmazonBillingConductorClient(AWSCredentials credentials, AmazonBillingConductorConfig clientConfig)
            : base(credentials, clientConfig)
        {
        }
        /// 
        /// Constructs AmazonBillingConductorClient with AWS Access Key ID and AWS Secret Key
        /// 
        /// AWS Access Key ID
        /// AWS Secret Access Key
        public AmazonBillingConductorClient(string awsAccessKeyId, string awsSecretAccessKey)
            : this(awsAccessKeyId, awsSecretAccessKey, new AmazonBillingConductorConfig())
        {
        }
        /// 
        /// Constructs AmazonBillingConductorClient with AWS Access Key ID and AWS Secret Key
        /// 
        /// AWS Access Key ID
        /// AWS Secret Access Key
        /// The region to connect.
        public AmazonBillingConductorClient(string awsAccessKeyId, string awsSecretAccessKey, RegionEndpoint region)
            : this(awsAccessKeyId, awsSecretAccessKey, new AmazonBillingConductorConfig() {RegionEndpoint=region})
        {
        }
        /// 
        /// Constructs AmazonBillingConductorClient with AWS Access Key ID, AWS Secret Key and an
        /// AmazonBillingConductorClient Configuration object. 
        /// 
        /// AWS Access Key ID
        /// AWS Secret Access Key
        /// The AmazonBillingConductorClient Configuration Object
        public AmazonBillingConductorClient(string awsAccessKeyId, string awsSecretAccessKey, AmazonBillingConductorConfig clientConfig)
            : base(awsAccessKeyId, awsSecretAccessKey, clientConfig)
        {
        }
        /// 
        /// Constructs AmazonBillingConductorClient with AWS Access Key ID and AWS Secret Key
        /// 
        /// AWS Access Key ID
        /// AWS Secret Access Key
        /// AWS Session Token
        public AmazonBillingConductorClient(string awsAccessKeyId, string awsSecretAccessKey, string awsSessionToken)
            : this(awsAccessKeyId, awsSecretAccessKey, awsSessionToken, new AmazonBillingConductorConfig())
        {
        }
        /// 
        /// Constructs AmazonBillingConductorClient with AWS Access Key ID and AWS Secret Key
        /// 
        /// AWS Access Key ID
        /// AWS Secret Access Key
        /// AWS Session Token
        /// The region to connect.
        public AmazonBillingConductorClient(string awsAccessKeyId, string awsSecretAccessKey, string awsSessionToken, RegionEndpoint region)
            : this(awsAccessKeyId, awsSecretAccessKey, awsSessionToken, new AmazonBillingConductorConfig{RegionEndpoint = region})
        {
        }
        /// 
        /// Constructs AmazonBillingConductorClient with AWS Access Key ID, AWS Secret Key and an
        /// AmazonBillingConductorClient Configuration object. 
        /// 
        /// AWS Access Key ID
        /// AWS Secret Access Key
        /// AWS Session Token
        /// The AmazonBillingConductorClient Configuration Object
        public AmazonBillingConductorClient(string awsAccessKeyId, string awsSecretAccessKey, string awsSessionToken, AmazonBillingConductorConfig clientConfig)
            : base(awsAccessKeyId, awsSecretAccessKey, awsSessionToken, clientConfig)
        {
        }
        #endregion
#if AWS_ASYNC_ENUMERABLES_API
        private IBillingConductorPaginatorFactory _paginators;
        /// 
        /// Paginators for the service
        /// 
        public IBillingConductorPaginatorFactory Paginators 
        {
            get 
            {
                if (this._paginators == null) 
                {
                    this._paginators = new BillingConductorPaginatorFactory(this);
                }
                return this._paginators;
            }
        }
#endif
        #region Overrides
        /// 
        /// Creates the signer for the service.
        /// 
        protected override AbstractAWSSigner CreateSigner()
        {
            return new AWS4Signer();
        } 
        /// 
        /// Customizes the runtime pipeline.
        /// 
        /// Runtime pipeline for the current client.
        protected override void CustomizeRuntimePipeline(RuntimePipeline pipeline)
        {
            pipeline.RemoveHandler();
            pipeline.AddHandlerAfter(new AmazonBillingConductorEndpointResolver());
        }
        /// 
        /// Capture metadata for the service.
        /// 
        protected override IServiceMetadata ServiceMetadata
        {
            get
            {
                return serviceMetadata;
            }
        }
        #endregion
        #region Dispose
        /// 
        /// Disposes the service client.
        /// 
        protected override void Dispose(bool disposing)
        {
            base.Dispose(disposing);
        }
        #endregion
        #region  AssociateAccounts
        internal virtual AssociateAccountsResponse AssociateAccounts(AssociateAccountsRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AssociateAccountsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AssociateAccountsResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Connects an array of account IDs in a consolidated billing family to a predefined
        /// billing group. The account IDs must be a part of the consolidated billing family during
        /// the current month, and not already associated with another billing group. The maximum
        /// number of accounts that can be associated in one call is 30.
        /// 
        /// Container for the necessary parameters to execute the AssociateAccounts service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the AssociateAccounts service method, as returned by BillingConductor.
        /// 
        /// You do not have sufficient access to perform this action.
        /// 
        /// 
        /// You can cause an inconsistent state by updating or deleting a resource.
        /// 
        /// 
        /// An unexpected error occurred while processing a request.
        /// 
        /// 
        /// The request references a resource that doesn't exist.
        /// 
        /// 
        /// The request would cause a service limit to exceed.
        /// 
        /// 
        /// The request was denied due to request throttling.
        /// 
        /// 
        /// The input doesn't match with the constraints specified by Amazon Web Services.
        /// 
        /// REST API Reference for AssociateAccounts Operation
        public virtual Task AssociateAccountsAsync(AssociateAccountsRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AssociateAccountsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AssociateAccountsResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  AssociatePricingRules
        internal virtual AssociatePricingRulesResponse AssociatePricingRules(AssociatePricingRulesRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AssociatePricingRulesRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AssociatePricingRulesResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Connects an array of PricingRuleArns to a defined PricingPlan.
        /// The maximum number PricingRuleArn that can be associated in one call
        /// is 30.
        /// 
        /// Container for the necessary parameters to execute the AssociatePricingRules service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the AssociatePricingRules service method, as returned by BillingConductor.
        /// 
        /// You do not have sufficient access to perform this action.
        /// 
        /// 
        /// You can cause an inconsistent state by updating or deleting a resource.
        /// 
        /// 
        /// An unexpected error occurred while processing a request.
        /// 
        /// 
        /// The request references a resource that doesn't exist.
        /// 
        /// 
        /// The request would cause a service limit to exceed.
        /// 
        /// 
        /// The request was denied due to request throttling.
        /// 
        /// 
        /// The input doesn't match with the constraints specified by Amazon Web Services.
        /// 
        /// REST API Reference for AssociatePricingRules Operation
        public virtual Task AssociatePricingRulesAsync(AssociatePricingRulesRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AssociatePricingRulesRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AssociatePricingRulesResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  BatchAssociateResourcesToCustomLineItem
        internal virtual BatchAssociateResourcesToCustomLineItemResponse BatchAssociateResourcesToCustomLineItem(BatchAssociateResourcesToCustomLineItemRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = BatchAssociateResourcesToCustomLineItemRequestMarshaller.Instance;
            options.ResponseUnmarshaller = BatchAssociateResourcesToCustomLineItemResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Associates a batch of resources to a percentage custom line item.
        /// 
        /// Container for the necessary parameters to execute the BatchAssociateResourcesToCustomLineItem service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the BatchAssociateResourcesToCustomLineItem service method, as returned by BillingConductor.
        /// 
        /// You do not have sufficient access to perform this action.
        /// 
        /// 
        /// You can cause an inconsistent state by updating or deleting a resource.
        /// 
        /// 
        /// An unexpected error occurred while processing a request.
        /// 
        /// 
        /// The request references a resource that doesn't exist.
        /// 
        /// 
        /// The request would cause a service limit to exceed.
        /// 
        /// 
        /// The request was denied due to request throttling.
        /// 
        /// 
        /// The input doesn't match with the constraints specified by Amazon Web Services.
        /// 
        /// REST API Reference for BatchAssociateResourcesToCustomLineItem Operation
        public virtual Task BatchAssociateResourcesToCustomLineItemAsync(BatchAssociateResourcesToCustomLineItemRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = BatchAssociateResourcesToCustomLineItemRequestMarshaller.Instance;
            options.ResponseUnmarshaller = BatchAssociateResourcesToCustomLineItemResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  BatchDisassociateResourcesFromCustomLineItem
        internal virtual BatchDisassociateResourcesFromCustomLineItemResponse BatchDisassociateResourcesFromCustomLineItem(BatchDisassociateResourcesFromCustomLineItemRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = BatchDisassociateResourcesFromCustomLineItemRequestMarshaller.Instance;
            options.ResponseUnmarshaller = BatchDisassociateResourcesFromCustomLineItemResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Disassociates a batch of resources from a percentage custom line item.
        /// 
        /// Container for the necessary parameters to execute the BatchDisassociateResourcesFromCustomLineItem service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the BatchDisassociateResourcesFromCustomLineItem service method, as returned by BillingConductor.
        /// 
        /// You do not have sufficient access to perform this action.
        /// 
        /// 
        /// You can cause an inconsistent state by updating or deleting a resource.
        /// 
        /// 
        /// An unexpected error occurred while processing a request.
        /// 
        /// 
        /// The request references a resource that doesn't exist.
        /// 
        /// 
        /// The request was denied due to request throttling.
        /// 
        /// 
        /// The input doesn't match with the constraints specified by Amazon Web Services.
        /// 
        /// REST API Reference for BatchDisassociateResourcesFromCustomLineItem Operation
        public virtual Task BatchDisassociateResourcesFromCustomLineItemAsync(BatchDisassociateResourcesFromCustomLineItemRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = BatchDisassociateResourcesFromCustomLineItemRequestMarshaller.Instance;
            options.ResponseUnmarshaller = BatchDisassociateResourcesFromCustomLineItemResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  CreateBillingGroup
        internal virtual CreateBillingGroupResponse CreateBillingGroup(CreateBillingGroupRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateBillingGroupRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateBillingGroupResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Creates a billing group that resembles a consolidated billing family that Amazon
        /// Web Services charges, based off of the predefined pricing plan computation.
        /// 
        /// Container for the necessary parameters to execute the CreateBillingGroup service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the CreateBillingGroup service method, as returned by BillingConductor.
        /// 
        /// You do not have sufficient access to perform this action.
        /// 
        /// 
        /// You can cause an inconsistent state by updating or deleting a resource.
        /// 
        /// 
        /// An unexpected error occurred while processing a request.
        /// 
        /// 
        /// The request would cause a service limit to exceed.
        /// 
        /// 
        /// The request was denied due to request throttling.
        /// 
        /// 
        /// The input doesn't match with the constraints specified by Amazon Web Services.
        /// 
        /// REST API Reference for CreateBillingGroup Operation
        public virtual Task CreateBillingGroupAsync(CreateBillingGroupRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateBillingGroupRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateBillingGroupResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  CreateCustomLineItem
        internal virtual CreateCustomLineItemResponse CreateCustomLineItem(CreateCustomLineItemRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateCustomLineItemRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateCustomLineItemResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Creates a custom line item that can be used to create a one-time fixed charge that
        /// can be applied to a single billing group for the current or previous billing period.
        /// The one-time fixed charge is either a fee or discount.
        /// 
        /// Container for the necessary parameters to execute the CreateCustomLineItem service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the CreateCustomLineItem service method, as returned by BillingConductor.
        /// 
        /// You do not have sufficient access to perform this action.
        /// 
        /// 
        /// You can cause an inconsistent state by updating or deleting a resource.
        /// 
        /// 
        /// An unexpected error occurred while processing a request.
        /// 
        /// 
        /// The request would cause a service limit to exceed.
        /// 
        /// 
        /// The request was denied due to request throttling.
        /// 
        /// 
        /// The input doesn't match with the constraints specified by Amazon Web Services.
        /// 
        /// REST API Reference for CreateCustomLineItem Operation
        public virtual Task CreateCustomLineItemAsync(CreateCustomLineItemRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateCustomLineItemRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateCustomLineItemResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  CreatePricingPlan
        internal virtual CreatePricingPlanResponse CreatePricingPlan(CreatePricingPlanRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreatePricingPlanRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreatePricingPlanResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Creates a pricing plan that is used for computing Amazon Web Services charges for
        /// billing groups.
        /// 
        /// Container for the necessary parameters to execute the CreatePricingPlan service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the CreatePricingPlan service method, as returned by BillingConductor.
        /// 
        /// You do not have sufficient access to perform this action.
        /// 
        /// 
        /// You can cause an inconsistent state by updating or deleting a resource.
        /// 
        /// 
        /// An unexpected error occurred while processing a request.
        /// 
        /// 
        /// The request references a resource that doesn't exist.
        /// 
        /// 
        /// The request would cause a service limit to exceed.
        /// 
        /// 
        /// The request was denied due to request throttling.
        /// 
        /// 
        /// The input doesn't match with the constraints specified by Amazon Web Services.
        /// 
        /// REST API Reference for CreatePricingPlan Operation
        public virtual Task CreatePricingPlanAsync(CreatePricingPlanRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreatePricingPlanRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreatePricingPlanResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  CreatePricingRule
        internal virtual CreatePricingRuleResponse CreatePricingRule(CreatePricingRuleRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreatePricingRuleRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreatePricingRuleResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Creates a pricing rule can be associated to a pricing plan, or a set of pricing plans.
        /// 
        /// Container for the necessary parameters to execute the CreatePricingRule service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the CreatePricingRule service method, as returned by BillingConductor.
        /// 
        /// You do not have sufficient access to perform this action.
        /// 
        /// 
        /// You can cause an inconsistent state by updating or deleting a resource.
        /// 
        /// 
        /// An unexpected error occurred while processing a request.
        /// 
        /// 
        /// The request would cause a service limit to exceed.
        /// 
        /// 
        /// The request was denied due to request throttling.
        /// 
        /// 
        /// The input doesn't match with the constraints specified by Amazon Web Services.
        /// 
        /// REST API Reference for CreatePricingRule Operation
        public virtual Task CreatePricingRuleAsync(CreatePricingRuleRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreatePricingRuleRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreatePricingRuleResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  DeleteBillingGroup
        internal virtual DeleteBillingGroupResponse DeleteBillingGroup(DeleteBillingGroupRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = DeleteBillingGroupRequestMarshaller.Instance;
            options.ResponseUnmarshaller = DeleteBillingGroupResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Deletes a billing group.
        /// 
        /// Container for the necessary parameters to execute the DeleteBillingGroup service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the DeleteBillingGroup service method, as returned by BillingConductor.
        /// 
        /// You do not have sufficient access to perform this action.
        /// 
        /// 
        /// An unexpected error occurred while processing a request.
        /// 
        /// 
        /// The request was denied due to request throttling.
        /// 
        /// 
        /// The input doesn't match with the constraints specified by Amazon Web Services.
        /// 
        /// REST API Reference for DeleteBillingGroup Operation
        public virtual Task DeleteBillingGroupAsync(DeleteBillingGroupRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = DeleteBillingGroupRequestMarshaller.Instance;
            options.ResponseUnmarshaller = DeleteBillingGroupResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  DeleteCustomLineItem
        internal virtual DeleteCustomLineItemResponse DeleteCustomLineItem(DeleteCustomLineItemRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = DeleteCustomLineItemRequestMarshaller.Instance;
            options.ResponseUnmarshaller = DeleteCustomLineItemResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Deletes the custom line item identified by the given ARN in the current, or previous
        /// billing period.
        /// 
        /// Container for the necessary parameters to execute the DeleteCustomLineItem service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the DeleteCustomLineItem service method, as returned by BillingConductor.
        /// 
        /// You do not have sufficient access to perform this action.
        /// 
        /// 
        /// You can cause an inconsistent state by updating or deleting a resource.
        /// 
        /// 
        /// An unexpected error occurred while processing a request.
        /// 
        /// 
        /// The request was denied due to request throttling.
        /// 
        /// 
        /// The input doesn't match with the constraints specified by Amazon Web Services.
        /// 
        /// REST API Reference for DeleteCustomLineItem Operation
        public virtual Task DeleteCustomLineItemAsync(DeleteCustomLineItemRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = DeleteCustomLineItemRequestMarshaller.Instance;
            options.ResponseUnmarshaller = DeleteCustomLineItemResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  DeletePricingPlan
        internal virtual DeletePricingPlanResponse DeletePricingPlan(DeletePricingPlanRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = DeletePricingPlanRequestMarshaller.Instance;
            options.ResponseUnmarshaller = DeletePricingPlanResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Deletes a pricing plan. The pricing plan must not be associated with any billing groups
        /// to delete successfully.
        /// 
        /// Container for the necessary parameters to execute the DeletePricingPlan service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the DeletePricingPlan service method, as returned by BillingConductor.
        /// 
        /// You do not have sufficient access to perform this action.
        /// 
        /// 
        /// You can cause an inconsistent state by updating or deleting a resource.
        /// 
        /// 
        /// An unexpected error occurred while processing a request.
        /// 
        /// 
        /// The request was denied due to request throttling.
        /// 
        /// 
        /// The input doesn't match with the constraints specified by Amazon Web Services.
        /// 
        /// REST API Reference for DeletePricingPlan Operation
        public virtual Task DeletePricingPlanAsync(DeletePricingPlanRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = DeletePricingPlanRequestMarshaller.Instance;
            options.ResponseUnmarshaller = DeletePricingPlanResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  DeletePricingRule
        internal virtual DeletePricingRuleResponse DeletePricingRule(DeletePricingRuleRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = DeletePricingRuleRequestMarshaller.Instance;
            options.ResponseUnmarshaller = DeletePricingRuleResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Deletes the pricing rule that's identified by the input Amazon Resource Name (ARN).
        /// 
        /// Container for the necessary parameters to execute the DeletePricingRule service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the DeletePricingRule service method, as returned by BillingConductor.
        /// 
        /// You do not have sufficient access to perform this action.
        /// 
        /// 
        /// You can cause an inconsistent state by updating or deleting a resource.
        /// 
        /// 
        /// An unexpected error occurred while processing a request.
        /// 
        /// 
        /// The request was denied due to request throttling.
        /// 
        /// 
        /// The input doesn't match with the constraints specified by Amazon Web Services.
        /// 
        /// REST API Reference for DeletePricingRule Operation
        public virtual Task DeletePricingRuleAsync(DeletePricingRuleRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = DeletePricingRuleRequestMarshaller.Instance;
            options.ResponseUnmarshaller = DeletePricingRuleResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  DisassociateAccounts
        internal virtual DisassociateAccountsResponse DisassociateAccounts(DisassociateAccountsRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = DisassociateAccountsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = DisassociateAccountsResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Removes the specified list of account IDs from the given billing group.
        /// 
        /// Container for the necessary parameters to execute the DisassociateAccounts service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the DisassociateAccounts service method, as returned by BillingConductor.
        /// 
        /// You do not have sufficient access to perform this action.
        /// 
        /// 
        /// You can cause an inconsistent state by updating or deleting a resource.
        /// 
        /// 
        /// An unexpected error occurred while processing a request.
        /// 
        /// 
        /// The request references a resource that doesn't exist.
        /// 
        /// 
        /// The request was denied due to request throttling.
        /// 
        /// 
        /// The input doesn't match with the constraints specified by Amazon Web Services.
        /// 
        /// REST API Reference for DisassociateAccounts Operation
        public virtual Task DisassociateAccountsAsync(DisassociateAccountsRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = DisassociateAccountsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = DisassociateAccountsResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  DisassociatePricingRules
        internal virtual DisassociatePricingRulesResponse DisassociatePricingRules(DisassociatePricingRulesRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = DisassociatePricingRulesRequestMarshaller.Instance;
            options.ResponseUnmarshaller = DisassociatePricingRulesResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Disassociates a list of pricing rules from a pricing plan.
        /// 
        /// Container for the necessary parameters to execute the DisassociatePricingRules service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the DisassociatePricingRules service method, as returned by BillingConductor.
        /// 
        /// You do not have sufficient access to perform this action.
        /// 
        /// 
        /// You can cause an inconsistent state by updating or deleting a resource.
        /// 
        /// 
        /// An unexpected error occurred while processing a request.
        /// 
        /// 
        /// The request references a resource that doesn't exist.
        /// 
        /// 
        /// The request was denied due to request throttling.
        /// 
        /// 
        /// The input doesn't match with the constraints specified by Amazon Web Services.
        /// 
        /// REST API Reference for DisassociatePricingRules Operation
        public virtual Task DisassociatePricingRulesAsync(DisassociatePricingRulesRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = DisassociatePricingRulesRequestMarshaller.Instance;
            options.ResponseUnmarshaller = DisassociatePricingRulesResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  ListAccountAssociations
        internal virtual ListAccountAssociationsResponse ListAccountAssociations(ListAccountAssociationsRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ListAccountAssociationsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ListAccountAssociationsResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// This is a paginated call to list linked accounts that are linked to the payer account
        /// for the specified time period. If no information is provided, the current billing
        /// period is used. The response will optionally include the billing group that's associated
        /// with the linked account.
        /// 
        /// Container for the necessary parameters to execute the ListAccountAssociations service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the ListAccountAssociations service method, as returned by BillingConductor.
        /// 
        /// You do not have sufficient access to perform this action.
        /// 
        /// 
        /// An unexpected error occurred while processing a request.
        /// 
        /// 
        /// The request references a resource that doesn't exist.
        /// 
        /// 
        /// The request was denied due to request throttling.
        /// 
        /// 
        /// The input doesn't match with the constraints specified by Amazon Web Services.
        /// 
        /// REST API Reference for ListAccountAssociations Operation
        public virtual Task ListAccountAssociationsAsync(ListAccountAssociationsRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ListAccountAssociationsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ListAccountAssociationsResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  ListBillingGroupCostReports
        internal virtual ListBillingGroupCostReportsResponse ListBillingGroupCostReports(ListBillingGroupCostReportsRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ListBillingGroupCostReportsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ListBillingGroupCostReportsResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// A paginated call to retrieve a summary report of actual Amazon Web Services charges
        /// and the calculated Amazon Web Services charges based on the associated pricing plan
        /// of a billing group.
        /// 
        /// Container for the necessary parameters to execute the ListBillingGroupCostReports service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the ListBillingGroupCostReports service method, as returned by BillingConductor.
        /// 
        /// You do not have sufficient access to perform this action.
        /// 
        /// 
        /// An unexpected error occurred while processing a request.
        /// 
        /// 
        /// The request references a resource that doesn't exist.
        /// 
        /// 
        /// The request was denied due to request throttling.
        /// 
        /// 
        /// The input doesn't match with the constraints specified by Amazon Web Services.
        /// 
        /// REST API Reference for ListBillingGroupCostReports Operation
        public virtual Task ListBillingGroupCostReportsAsync(ListBillingGroupCostReportsRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ListBillingGroupCostReportsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ListBillingGroupCostReportsResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  ListBillingGroups
        internal virtual ListBillingGroupsResponse ListBillingGroups(ListBillingGroupsRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ListBillingGroupsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ListBillingGroupsResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// A paginated call to retrieve a list of billing groups for the given billing period.
        /// If you don't provide a billing group, the current billing period is used.
        /// 
        /// Container for the necessary parameters to execute the ListBillingGroups service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the ListBillingGroups service method, as returned by BillingConductor.
        /// 
        /// You do not have sufficient access to perform this action.
        /// 
        /// 
        /// An unexpected error occurred while processing a request.
        /// 
        /// 
        /// The request references a resource that doesn't exist.
        /// 
        /// 
        /// The request was denied due to request throttling.
        /// 
        /// 
        /// The input doesn't match with the constraints specified by Amazon Web Services.
        /// 
        /// REST API Reference for ListBillingGroups Operation
        public virtual Task ListBillingGroupsAsync(ListBillingGroupsRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ListBillingGroupsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ListBillingGroupsResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  ListCustomLineItems
        internal virtual ListCustomLineItemsResponse ListCustomLineItems(ListCustomLineItemsRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ListCustomLineItemsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ListCustomLineItemsResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// A paginated call to get a list of all custom line items (FFLIs) for the given billing
        /// period. If you don't provide a billing period, the current billing period is used.
        /// 
        /// Container for the necessary parameters to execute the ListCustomLineItems service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the ListCustomLineItems service method, as returned by BillingConductor.
        /// 
        /// You do not have sufficient access to perform this action.
        /// 
        /// 
        /// An unexpected error occurred while processing a request.
        /// 
        /// 
        /// The request references a resource that doesn't exist.
        /// 
        /// 
        /// The request was denied due to request throttling.
        /// 
        /// 
        /// The input doesn't match with the constraints specified by Amazon Web Services.
        /// 
        /// REST API Reference for ListCustomLineItems Operation
        public virtual Task ListCustomLineItemsAsync(ListCustomLineItemsRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ListCustomLineItemsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ListCustomLineItemsResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  ListCustomLineItemVersions
        internal virtual ListCustomLineItemVersionsResponse ListCustomLineItemVersions(ListCustomLineItemVersionsRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ListCustomLineItemVersionsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ListCustomLineItemVersionsResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// A paginated call to get a list of all custom line item versions.
        /// 
        /// Container for the necessary parameters to execute the ListCustomLineItemVersions service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the ListCustomLineItemVersions service method, as returned by BillingConductor.
        /// 
        /// You do not have sufficient access to perform this action.
        /// 
        /// 
        /// An unexpected error occurred while processing a request.
        /// 
        /// 
        /// The request was denied due to request throttling.
        /// 
        /// 
        /// The input doesn't match with the constraints specified by Amazon Web Services.
        /// 
        /// REST API Reference for ListCustomLineItemVersions Operation
        public virtual Task ListCustomLineItemVersionsAsync(ListCustomLineItemVersionsRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ListCustomLineItemVersionsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ListCustomLineItemVersionsResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  ListPricingPlans
        internal virtual ListPricingPlansResponse ListPricingPlans(ListPricingPlansRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ListPricingPlansRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ListPricingPlansResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// A paginated call to get pricing plans for the given billing period. If you don't provide
        /// a billing period, the current billing period is used.
        /// 
        /// Container for the necessary parameters to execute the ListPricingPlans service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the ListPricingPlans service method, as returned by BillingConductor.
        /// 
        /// You do not have sufficient access to perform this action.
        /// 
        /// 
        /// An unexpected error occurred while processing a request.
        /// 
        /// 
        /// The request was denied due to request throttling.
        /// 
        /// 
        /// The input doesn't match with the constraints specified by Amazon Web Services.
        /// 
        /// REST API Reference for ListPricingPlans Operation
        public virtual Task ListPricingPlansAsync(ListPricingPlansRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ListPricingPlansRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ListPricingPlansResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  ListPricingPlansAssociatedWithPricingRule
        internal virtual ListPricingPlansAssociatedWithPricingRuleResponse ListPricingPlansAssociatedWithPricingRule(ListPricingPlansAssociatedWithPricingRuleRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ListPricingPlansAssociatedWithPricingRuleRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ListPricingPlansAssociatedWithPricingRuleResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// A list of the pricing plans that are associated with a pricing rule.
        /// 
        /// Container for the necessary parameters to execute the ListPricingPlansAssociatedWithPricingRule service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the ListPricingPlansAssociatedWithPricingRule service method, as returned by BillingConductor.
        /// 
        /// You do not have sufficient access to perform this action.
        /// 
        /// 
        /// An unexpected error occurred while processing a request.
        /// 
        /// 
        /// The request references a resource that doesn't exist.
        /// 
        /// 
        /// The request was denied due to request throttling.
        /// 
        /// 
        /// The input doesn't match with the constraints specified by Amazon Web Services.
        /// 
        /// REST API Reference for ListPricingPlansAssociatedWithPricingRule Operation
        public virtual Task ListPricingPlansAssociatedWithPricingRuleAsync(ListPricingPlansAssociatedWithPricingRuleRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ListPricingPlansAssociatedWithPricingRuleRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ListPricingPlansAssociatedWithPricingRuleResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  ListPricingRules
        internal virtual ListPricingRulesResponse ListPricingRules(ListPricingRulesRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ListPricingRulesRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ListPricingRulesResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Describes a pricing rule that can be associated to a pricing plan, or set of pricing
        /// plans.
        /// 
        /// Container for the necessary parameters to execute the ListPricingRules service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the ListPricingRules service method, as returned by BillingConductor.
        /// 
        /// You do not have sufficient access to perform this action.
        /// 
        /// 
        /// An unexpected error occurred while processing a request.
        /// 
        /// 
        /// The request was denied due to request throttling.
        /// 
        /// 
        /// The input doesn't match with the constraints specified by Amazon Web Services.
        /// 
        /// REST API Reference for ListPricingRules Operation
        public virtual Task ListPricingRulesAsync(ListPricingRulesRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ListPricingRulesRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ListPricingRulesResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  ListPricingRulesAssociatedToPricingPlan
        internal virtual ListPricingRulesAssociatedToPricingPlanResponse ListPricingRulesAssociatedToPricingPlan(ListPricingRulesAssociatedToPricingPlanRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ListPricingRulesAssociatedToPricingPlanRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ListPricingRulesAssociatedToPricingPlanResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Lists the pricing rules that are associated with a pricing plan.
        /// 
        /// Container for the necessary parameters to execute the ListPricingRulesAssociatedToPricingPlan service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the ListPricingRulesAssociatedToPricingPlan service method, as returned by BillingConductor.
        /// 
        /// You do not have sufficient access to perform this action.
        /// 
        /// 
        /// An unexpected error occurred while processing a request.
        /// 
        /// 
        /// The request references a resource that doesn't exist.
        /// 
        /// 
        /// The request was denied due to request throttling.
        /// 
        /// 
        /// The input doesn't match with the constraints specified by Amazon Web Services.
        /// 
        /// REST API Reference for ListPricingRulesAssociatedToPricingPlan Operation
        public virtual Task ListPricingRulesAssociatedToPricingPlanAsync(ListPricingRulesAssociatedToPricingPlanRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ListPricingRulesAssociatedToPricingPlanRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ListPricingRulesAssociatedToPricingPlanResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  ListResourcesAssociatedToCustomLineItem
        internal virtual ListResourcesAssociatedToCustomLineItemResponse ListResourcesAssociatedToCustomLineItem(ListResourcesAssociatedToCustomLineItemRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ListResourcesAssociatedToCustomLineItemRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ListResourcesAssociatedToCustomLineItemResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// List the resources that are associated to a custom line item.
        /// 
        /// Container for the necessary parameters to execute the ListResourcesAssociatedToCustomLineItem service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the ListResourcesAssociatedToCustomLineItem service method, as returned by BillingConductor.
        /// 
        /// You do not have sufficient access to perform this action.
        /// 
        /// 
        /// An unexpected error occurred while processing a request.
        /// 
        /// 
        /// The request references a resource that doesn't exist.
        /// 
        /// 
        /// The request was denied due to request throttling.
        /// 
        /// 
        /// The input doesn't match with the constraints specified by Amazon Web Services.
        /// 
        /// REST API Reference for ListResourcesAssociatedToCustomLineItem Operation
        public virtual Task ListResourcesAssociatedToCustomLineItemAsync(ListResourcesAssociatedToCustomLineItemRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ListResourcesAssociatedToCustomLineItemRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ListResourcesAssociatedToCustomLineItemResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  ListTagsForResource
        internal virtual ListTagsForResourceResponse ListTagsForResource(ListTagsForResourceRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ListTagsForResourceRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ListTagsForResourceResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// A list the tags for a resource.
        /// 
        /// Container for the necessary parameters to execute the ListTagsForResource service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the ListTagsForResource service method, as returned by BillingConductor.
        /// 
        /// You do not have sufficient access to perform this action.
        /// 
        /// 
        /// An unexpected error occurred while processing a request.
        /// 
        /// 
        /// The request references a resource that doesn't exist.
        /// 
        /// 
        /// The request was denied due to request throttling.
        /// 
        /// 
        /// The input doesn't match with the constraints specified by Amazon Web Services.
        /// 
        /// REST API Reference for ListTagsForResource Operation
        public virtual Task ListTagsForResourceAsync(ListTagsForResourceRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ListTagsForResourceRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ListTagsForResourceResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  TagResource
        internal virtual TagResourceResponse TagResource(TagResourceRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = TagResourceRequestMarshaller.Instance;
            options.ResponseUnmarshaller = TagResourceResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Associates the specified tags to a resource with the specified resourceArn.
        /// If existing tags on a resource are not specified in the request parameters, they are
        /// not changed.
        /// 
        /// Container for the necessary parameters to execute the TagResource service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the TagResource service method, as returned by BillingConductor.
        /// 
        /// You do not have sufficient access to perform this action.
        /// 
        /// 
        /// An unexpected error occurred while processing a request.
        /// 
        /// 
        /// The request references a resource that doesn't exist.
        /// 
        /// 
        /// The request was denied due to request throttling.
        /// 
        /// 
        /// The input doesn't match with the constraints specified by Amazon Web Services.
        /// 
        /// REST API Reference for TagResource Operation
        public virtual Task TagResourceAsync(TagResourceRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = TagResourceRequestMarshaller.Instance;
            options.ResponseUnmarshaller = TagResourceResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  UntagResource
        internal virtual UntagResourceResponse UntagResource(UntagResourceRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = UntagResourceRequestMarshaller.Instance;
            options.ResponseUnmarshaller = UntagResourceResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Deletes specified tags from a resource.
        /// 
        /// Container for the necessary parameters to execute the UntagResource service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the UntagResource service method, as returned by BillingConductor.
        /// 
        /// You do not have sufficient access to perform this action.
        /// 
        /// 
        /// An unexpected error occurred while processing a request.
        /// 
        /// 
        /// The request references a resource that doesn't exist.
        /// 
        /// 
        /// The request was denied due to request throttling.
        /// 
        /// 
        /// The input doesn't match with the constraints specified by Amazon Web Services.
        /// 
        /// REST API Reference for UntagResource Operation
        public virtual Task UntagResourceAsync(UntagResourceRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = UntagResourceRequestMarshaller.Instance;
            options.ResponseUnmarshaller = UntagResourceResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  UpdateBillingGroup
        internal virtual UpdateBillingGroupResponse UpdateBillingGroup(UpdateBillingGroupRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = UpdateBillingGroupRequestMarshaller.Instance;
            options.ResponseUnmarshaller = UpdateBillingGroupResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// This updates an existing billing group.
        /// 
        /// Container for the necessary parameters to execute the UpdateBillingGroup service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the UpdateBillingGroup service method, as returned by BillingConductor.
        /// 
        /// You do not have sufficient access to perform this action.
        /// 
        /// 
        /// You can cause an inconsistent state by updating or deleting a resource.
        /// 
        /// 
        /// An unexpected error occurred while processing a request.
        /// 
        /// 
        /// The request references a resource that doesn't exist.
        /// 
        /// 
        /// The request was denied due to request throttling.
        /// 
        /// 
        /// The input doesn't match with the constraints specified by Amazon Web Services.
        /// 
        /// REST API Reference for UpdateBillingGroup Operation
        public virtual Task UpdateBillingGroupAsync(UpdateBillingGroupRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = UpdateBillingGroupRequestMarshaller.Instance;
            options.ResponseUnmarshaller = UpdateBillingGroupResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  UpdateCustomLineItem
        internal virtual UpdateCustomLineItemResponse UpdateCustomLineItem(UpdateCustomLineItemRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = UpdateCustomLineItemRequestMarshaller.Instance;
            options.ResponseUnmarshaller = UpdateCustomLineItemResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Update an existing custom line item in the current or previous billing period.
        /// 
        /// Container for the necessary parameters to execute the UpdateCustomLineItem service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the UpdateCustomLineItem service method, as returned by BillingConductor.
        /// 
        /// You do not have sufficient access to perform this action.
        /// 
        /// 
        /// An unexpected error occurred while processing a request.
        /// 
        /// 
        /// The request references a resource that doesn't exist.
        /// 
        /// 
        /// The request was denied due to request throttling.
        /// 
        /// 
        /// The input doesn't match with the constraints specified by Amazon Web Services.
        /// 
        /// REST API Reference for UpdateCustomLineItem Operation
        public virtual Task UpdateCustomLineItemAsync(UpdateCustomLineItemRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = UpdateCustomLineItemRequestMarshaller.Instance;
            options.ResponseUnmarshaller = UpdateCustomLineItemResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  UpdatePricingPlan
        internal virtual UpdatePricingPlanResponse UpdatePricingPlan(UpdatePricingPlanRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = UpdatePricingPlanRequestMarshaller.Instance;
            options.ResponseUnmarshaller = UpdatePricingPlanResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// This updates an existing pricing plan.
        /// 
        /// Container for the necessary parameters to execute the UpdatePricingPlan service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the UpdatePricingPlan service method, as returned by BillingConductor.
        /// 
        /// You do not have sufficient access to perform this action.
        /// 
        /// 
        /// You can cause an inconsistent state by updating or deleting a resource.
        /// 
        /// 
        /// An unexpected error occurred while processing a request.
        /// 
        /// 
        /// The request references a resource that doesn't exist.
        /// 
        /// 
        /// The request was denied due to request throttling.
        /// 
        /// 
        /// The input doesn't match with the constraints specified by Amazon Web Services.
        /// 
        /// REST API Reference for UpdatePricingPlan Operation
        public virtual Task UpdatePricingPlanAsync(UpdatePricingPlanRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = UpdatePricingPlanRequestMarshaller.Instance;
            options.ResponseUnmarshaller = UpdatePricingPlanResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  UpdatePricingRule
        internal virtual UpdatePricingRuleResponse UpdatePricingRule(UpdatePricingRuleRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = UpdatePricingRuleRequestMarshaller.Instance;
            options.ResponseUnmarshaller = UpdatePricingRuleResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Updates an existing pricing rule.
        /// 
        /// Container for the necessary parameters to execute the UpdatePricingRule service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the UpdatePricingRule service method, as returned by BillingConductor.
        /// 
        /// You do not have sufficient access to perform this action.
        /// 
        /// 
        /// You can cause an inconsistent state by updating or deleting a resource.
        /// 
        /// 
        /// An unexpected error occurred while processing a request.
        /// 
        /// 
        /// The request references a resource that doesn't exist.
        /// 
        /// 
        /// The request was denied due to request throttling.
        /// 
        /// 
        /// The input doesn't match with the constraints specified by Amazon Web Services.
        /// 
        /// REST API Reference for UpdatePricingRule Operation
        public virtual Task UpdatePricingRuleAsync(UpdatePricingRuleRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = UpdatePricingRuleRequestMarshaller.Instance;
            options.ResponseUnmarshaller = UpdatePricingRuleResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
    }
}