/*
 * 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 appflow-2020-08-23.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.Appflow.Model;
using Amazon.Appflow.Model.Internal.MarshallTransformations;
using Amazon.Appflow.Internal;
using Amazon.Runtime;
using Amazon.Runtime.Internal;
using Amazon.Runtime.Internal.Auth;
using Amazon.Runtime.Internal.Transform;
namespace Amazon.Appflow
{
    /// 
    /// Implementation for accessing Appflow
    ///
    /// Welcome to the Amazon AppFlow API reference. This guide is for developers who need
    /// detailed information about the Amazon AppFlow API operations, data types, and errors.
    /// 
    /// 
    ///  
    /// 
    /// Amazon AppFlow is a fully managed integration service that enables you to securely
    /// transfer data between software as a service (SaaS) applications like Salesforce, Marketo,
    /// Slack, and ServiceNow, and Amazon Web Services like Amazon S3 and Amazon Redshift.
    /// 
    /// 
    ///  
    /// 
    /// Use the following links to get started on the Amazon AppFlow API:
    /// 
    ///   -  
    /// 
    ///  Actions:
    /// An alphabetical list of all Amazon AppFlow API operations.
    /// 
    ///  
-  
    /// 
    ///  Data
    /// types: An alphabetical list of all Amazon AppFlow data types.
    /// 
    ///  
-  
    /// 
    ///  Common
    /// parameters: Parameters that all Query operations can use.
    /// 
    ///  
-  
    /// 
    ///  Common
    /// errors: Client and server errors that all operations can return.
    /// 
    ///  
/// 
    /// If you're new to Amazon AppFlow, we recommend that you review the Amazon
    /// AppFlow User Guide.
    /// 
    ///  
    /// 
    /// Amazon AppFlow API users can use vendor-specific mechanisms for OAuth, and include
    /// applicable OAuth attributes (such asauth-code and redirecturi)
    /// with the connector-specific ConnectorProfileProperties when creating
    /// a new connector profile using Amazon AppFlow API operations. For example, Salesforce
    /// users can refer to the 
    /// Authorize Apps with OAuth  documentation.
    /// 
    /// 
    public partial class AmazonAppflowClient : AmazonServiceClient, IAmazonAppflow
    {
        private static IServiceMetadata serviceMetadata = new AmazonAppflowMetadata();
        
        #region Constructors
        /// 
        /// Constructs AmazonAppflowClient 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 AmazonAppflowClient()
            : base(FallbackCredentialsFactory.GetCredentials(), new AmazonAppflowConfig()) { }
        /// 
        /// Constructs AmazonAppflowClient 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 AmazonAppflowClient(RegionEndpoint region)
            : base(FallbackCredentialsFactory.GetCredentials(), new AmazonAppflowConfig{RegionEndpoint = region}) { }
        /// 
        /// Constructs AmazonAppflowClient 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 AmazonAppflowClient Configuration Object
        public AmazonAppflowClient(AmazonAppflowConfig config)
            : base(FallbackCredentialsFactory.GetCredentials(config), config){}
        /// 
        /// Constructs AmazonAppflowClient with AWS Credentials
        /// 
        /// AWS Credentials
        public AmazonAppflowClient(AWSCredentials credentials)
            : this(credentials, new AmazonAppflowConfig())
        {
        }
        /// 
        /// Constructs AmazonAppflowClient with AWS Credentials
        /// 
        /// AWS Credentials
        /// The region to connect.
        public AmazonAppflowClient(AWSCredentials credentials, RegionEndpoint region)
            : this(credentials, new AmazonAppflowConfig{RegionEndpoint = region})
        {
        }
        /// 
        /// Constructs AmazonAppflowClient with AWS Credentials and an
        /// AmazonAppflowClient Configuration object.
        /// 
        /// AWS Credentials
        /// The AmazonAppflowClient Configuration Object
        public AmazonAppflowClient(AWSCredentials credentials, AmazonAppflowConfig clientConfig)
            : base(credentials, clientConfig)
        {
        }
        /// 
        /// Constructs AmazonAppflowClient with AWS Access Key ID and AWS Secret Key
        /// 
        /// AWS Access Key ID
        /// AWS Secret Access Key
        public AmazonAppflowClient(string awsAccessKeyId, string awsSecretAccessKey)
            : this(awsAccessKeyId, awsSecretAccessKey, new AmazonAppflowConfig())
        {
        }
        /// 
        /// Constructs AmazonAppflowClient with AWS Access Key ID and AWS Secret Key
        /// 
        /// AWS Access Key ID
        /// AWS Secret Access Key
        /// The region to connect.
        public AmazonAppflowClient(string awsAccessKeyId, string awsSecretAccessKey, RegionEndpoint region)
            : this(awsAccessKeyId, awsSecretAccessKey, new AmazonAppflowConfig() {RegionEndpoint=region})
        {
        }
        /// 
        /// Constructs AmazonAppflowClient with AWS Access Key ID, AWS Secret Key and an
        /// AmazonAppflowClient Configuration object. 
        /// 
        /// AWS Access Key ID
        /// AWS Secret Access Key
        /// The AmazonAppflowClient Configuration Object
        public AmazonAppflowClient(string awsAccessKeyId, string awsSecretAccessKey, AmazonAppflowConfig clientConfig)
            : base(awsAccessKeyId, awsSecretAccessKey, clientConfig)
        {
        }
        /// 
        /// Constructs AmazonAppflowClient with AWS Access Key ID and AWS Secret Key
        /// 
        /// AWS Access Key ID
        /// AWS Secret Access Key
        /// AWS Session Token
        public AmazonAppflowClient(string awsAccessKeyId, string awsSecretAccessKey, string awsSessionToken)
            : this(awsAccessKeyId, awsSecretAccessKey, awsSessionToken, new AmazonAppflowConfig())
        {
        }
        /// 
        /// Constructs AmazonAppflowClient 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 AmazonAppflowClient(string awsAccessKeyId, string awsSecretAccessKey, string awsSessionToken, RegionEndpoint region)
            : this(awsAccessKeyId, awsSecretAccessKey, awsSessionToken, new AmazonAppflowConfig{RegionEndpoint = region})
        {
        }
        /// 
        /// Constructs AmazonAppflowClient with AWS Access Key ID, AWS Secret Key and an
        /// AmazonAppflowClient Configuration object. 
        /// 
        /// AWS Access Key ID
        /// AWS Secret Access Key
        /// AWS Session Token
        /// The AmazonAppflowClient Configuration Object
        public AmazonAppflowClient(string awsAccessKeyId, string awsSecretAccessKey, string awsSessionToken, AmazonAppflowConfig clientConfig)
            : base(awsAccessKeyId, awsSecretAccessKey, awsSessionToken, clientConfig)
        {
        }
        #endregion
#if AWS_ASYNC_ENUMERABLES_API
        private IAppflowPaginatorFactory _paginators;
        /// 
        /// Paginators for the service
        /// 
        public IAppflowPaginatorFactory Paginators 
        {
            get 
            {
                if (this._paginators == null) 
                {
                    this._paginators = new AppflowPaginatorFactory(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 AmazonAppflowEndpointResolver());
        }
        /// 
        /// 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  CancelFlowExecutions
        internal virtual CancelFlowExecutionsResponse CancelFlowExecutions(CancelFlowExecutionsRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CancelFlowExecutionsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CancelFlowExecutionsResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Cancels active runs for a flow.
        /// 
        ///  
        /// 
        /// You can cancel all of the active runs for a flow, or you can cancel specific runs
        /// by providing their IDs.
        /// 
        ///  
        /// 
        /// You can cancel a flow run only when the run is in progress. You can't cancel a run
        /// that has already completed or failed. You also can't cancel a run that's scheduled
        /// to occur but hasn't started yet. To prevent a scheduled run, you can deactivate the
        /// flow with the StopFlow action.
        /// 
        ///  
        /// 
        /// You cannot resume a run after you cancel it.
        /// 
        ///  
        /// 
        /// When you send your request, the status for each run becomes CancelStarted.
        /// When the cancellation completes, the status becomes Canceled.
        /// 
        ///   
        /// 
        /// When you cancel a run, you still incur charges for any data that the run already processed
        /// before the cancellation. If the run had already written some data to the flow destination,
        /// then that data remains in the destination. If you configured the flow to use a batch
        /// API (such as the Salesforce Bulk API 2.0), then the run will finish reading or writing
        /// its entire batch of data after the cancellation. For these operations, the data processing
        /// charges for Amazon AppFlow apply. For the pricing information, see Amazon
        /// AppFlow pricing.
        /// 
        ///  
        /// 
        /// Container for the necessary parameters to execute the CancelFlowExecutions service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the CancelFlowExecutions service method, as returned by Appflow.
        /// 
        /// AppFlow/Requester has invalid or missing permissions.
        /// 
        /// 
        /// An internal service error occurred during the processing of your request. Try again
        /// later.
        /// 
        /// 
        /// The resource specified in the request (such as the source or destination connector
        /// profile) is not found.
        /// 
        /// 
        /// API calls have exceeded the maximum allowed API request rate per account and per Region.
        /// 
        /// 
        /// The request has invalid or missing parameters.
        /// 
        /// REST API Reference for CancelFlowExecutions Operation
        public virtual Task CancelFlowExecutionsAsync(CancelFlowExecutionsRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CancelFlowExecutionsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CancelFlowExecutionsResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  CreateConnectorProfile
        internal virtual CreateConnectorProfileResponse CreateConnectorProfile(CreateConnectorProfileRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateConnectorProfileRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateConnectorProfileResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Creates a new connector profile associated with your Amazon Web Services account.
        /// There is a soft quota of 100 connector profiles per Amazon Web Services account. If
        /// you need more connector profiles than this quota allows, you can submit a request
        /// to the Amazon AppFlow team through the Amazon AppFlow support channel. In each connector
        /// profile that you create, you can provide the credentials and properties for only one
        /// connector.
        /// 
        /// Container for the necessary parameters to execute the CreateConnectorProfile service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the CreateConnectorProfile service method, as returned by Appflow.
        /// 
        /// There was a conflict when processing the request (for example, a flow with the given
        /// name already exists within the account. Check for conflicting resource names and try
        /// again.
        /// 
        /// 
        /// An error occurred when authenticating with the connector endpoint.
        /// 
        /// 
        /// An internal service error occurred during the processing of your request. Try again
        /// later.
        /// 
        /// 
        /// The request would cause a service quota (such as the number of flows) to be exceeded.
        /// 
        /// 
        /// The request has invalid or missing parameters.
        /// 
        /// REST API Reference for CreateConnectorProfile Operation
        public virtual Task CreateConnectorProfileAsync(CreateConnectorProfileRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateConnectorProfileRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateConnectorProfileResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  CreateFlow
        internal virtual CreateFlowResponse CreateFlow(CreateFlowRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateFlowRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateFlowResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Enables your application to create a new flow using Amazon AppFlow. You must create
        /// a connector profile before calling this API. Please note that the Request Syntax below
        /// shows syntax for multiple destinations, however, you can only transfer data to one
        /// item in this list at a time. Amazon AppFlow does not currently support flows to multiple
        /// destinations at once.
        /// 
        /// Container for the necessary parameters to execute the CreateFlow service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the CreateFlow service method, as returned by Appflow.
        /// 
        /// There was a conflict when processing the request (for example, a flow with the given
        /// name already exists within the account. Check for conflicting resource names and try
        /// again.
        /// 
        /// 
        /// An error occurred when authenticating with the connector endpoint.
        /// 
        /// 
        /// An error occurred when retrieving data from the connector endpoint.
        /// 
        /// 
        /// An internal service error occurred during the processing of your request. Try again
        /// later.
        /// 
        /// 
        /// The resource specified in the request (such as the source or destination connector
        /// profile) is not found.
        /// 
        /// 
        /// The request would cause a service quota (such as the number of flows) to be exceeded.
        /// 
        /// 
        /// The request has invalid or missing parameters.
        /// 
        /// REST API Reference for CreateFlow Operation
        public virtual Task CreateFlowAsync(CreateFlowRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateFlowRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateFlowResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  DeleteConnectorProfile
        internal virtual DeleteConnectorProfileResponse DeleteConnectorProfile(DeleteConnectorProfileRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = DeleteConnectorProfileRequestMarshaller.Instance;
            options.ResponseUnmarshaller = DeleteConnectorProfileResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Enables you to delete an existing connector profile.
        /// 
        /// Container for the necessary parameters to execute the DeleteConnectorProfile service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the DeleteConnectorProfile service method, as returned by Appflow.
        /// 
        /// There was a conflict when processing the request (for example, a flow with the given
        /// name already exists within the account. Check for conflicting resource names and try
        /// again.
        /// 
        /// 
        /// An internal service error occurred during the processing of your request. Try again
        /// later.
        /// 
        /// 
        /// The resource specified in the request (such as the source or destination connector
        /// profile) is not found.
        /// 
        /// REST API Reference for DeleteConnectorProfile Operation
        public virtual Task DeleteConnectorProfileAsync(DeleteConnectorProfileRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = DeleteConnectorProfileRequestMarshaller.Instance;
            options.ResponseUnmarshaller = DeleteConnectorProfileResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  DeleteFlow
        internal virtual DeleteFlowResponse DeleteFlow(DeleteFlowRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = DeleteFlowRequestMarshaller.Instance;
            options.ResponseUnmarshaller = DeleteFlowResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Enables your application to delete an existing flow. Before deleting the flow, Amazon
        /// AppFlow validates the request by checking the flow configuration and status. You can
        /// delete flows one at a time.
        /// 
        /// Container for the necessary parameters to execute the DeleteFlow service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the DeleteFlow service method, as returned by Appflow.
        /// 
        /// There was a conflict when processing the request (for example, a flow with the given
        /// name already exists within the account. Check for conflicting resource names and try
        /// again.
        /// 
        /// 
        /// An internal service error occurred during the processing of your request. Try again
        /// later.
        /// 
        /// 
        /// The resource specified in the request (such as the source or destination connector
        /// profile) is not found.
        /// 
        /// REST API Reference for DeleteFlow Operation
        public virtual Task DeleteFlowAsync(DeleteFlowRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = DeleteFlowRequestMarshaller.Instance;
            options.ResponseUnmarshaller = DeleteFlowResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  DescribeConnector
        internal virtual DescribeConnectorResponse DescribeConnector(DescribeConnectorRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = DescribeConnectorRequestMarshaller.Instance;
            options.ResponseUnmarshaller = DescribeConnectorResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Describes the given custom connector registered in your Amazon Web Services account.
        /// This API can be used for custom connectors that are registered in your account and
        /// also for Amazon authored connectors.
        /// 
        /// Container for the necessary parameters to execute the DescribeConnector service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the DescribeConnector service method, as returned by Appflow.
        /// 
        /// An internal service error occurred during the processing of your request. Try again
        /// later.
        /// 
        /// 
        /// The resource specified in the request (such as the source or destination connector
        /// profile) is not found.
        /// 
        /// 
        /// The request has invalid or missing parameters.
        /// 
        /// REST API Reference for DescribeConnector Operation
        public virtual Task DescribeConnectorAsync(DescribeConnectorRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = DescribeConnectorRequestMarshaller.Instance;
            options.ResponseUnmarshaller = DescribeConnectorResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  DescribeConnectorEntity
        internal virtual DescribeConnectorEntityResponse DescribeConnectorEntity(DescribeConnectorEntityRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = DescribeConnectorEntityRequestMarshaller.Instance;
            options.ResponseUnmarshaller = DescribeConnectorEntityResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Provides details regarding the entity used with the connector, with a description
        /// of the data model for each field in that entity.
        /// 
        /// Container for the necessary parameters to execute the DescribeConnectorEntity service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the DescribeConnectorEntity service method, as returned by Appflow.
        /// 
        /// An error occurred when authenticating with the connector endpoint.
        /// 
        /// 
        /// An error occurred when retrieving data from the connector endpoint.
        /// 
        /// 
        /// An internal service error occurred during the processing of your request. Try again
        /// later.
        /// 
        /// 
        /// The resource specified in the request (such as the source or destination connector
        /// profile) is not found.
        /// 
        /// 
        /// The request has invalid or missing parameters.
        /// 
        /// REST API Reference for DescribeConnectorEntity Operation
        public virtual Task DescribeConnectorEntityAsync(DescribeConnectorEntityRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = DescribeConnectorEntityRequestMarshaller.Instance;
            options.ResponseUnmarshaller = DescribeConnectorEntityResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  DescribeConnectorProfiles
        internal virtual DescribeConnectorProfilesResponse DescribeConnectorProfiles(DescribeConnectorProfilesRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = DescribeConnectorProfilesRequestMarshaller.Instance;
            options.ResponseUnmarshaller = DescribeConnectorProfilesResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Returns a list of connector-profile details matching the provided connector-profile
        /// names and connector-types. Both input lists are optional, and you can
        /// use them to filter the result. 
        /// 
        ///  
        /// 
        /// If no names or connector-types are provided, returns all connector profiles
        /// in a paginated form. If there is no match, this operation returns an empty list.
        /// 
        /// 
        /// Container for the necessary parameters to execute the DescribeConnectorProfiles service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the DescribeConnectorProfiles service method, as returned by Appflow.
        /// 
        /// An internal service error occurred during the processing of your request. Try again
        /// later.
        /// 
        /// 
        /// The request has invalid or missing parameters.
        /// 
        /// REST API Reference for DescribeConnectorProfiles Operation
        public virtual Task DescribeConnectorProfilesAsync(DescribeConnectorProfilesRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = DescribeConnectorProfilesRequestMarshaller.Instance;
            options.ResponseUnmarshaller = DescribeConnectorProfilesResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  DescribeConnectors
        internal virtual DescribeConnectorsResponse DescribeConnectors(DescribeConnectorsRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = DescribeConnectorsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = DescribeConnectorsResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Describes the connectors vended by Amazon AppFlow for specified connector types.
        /// If you don't specify a connector type, this operation describes all connectors vended
        /// by Amazon AppFlow. If there are more connectors than can be returned in one page,
        /// the response contains a nextToken object, which can be be passed in to
        /// the next call to the DescribeConnectors API operation to retrieve the
        /// next page.
        /// 
        /// Container for the necessary parameters to execute the DescribeConnectors service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the DescribeConnectors service method, as returned by Appflow.
        /// 
        /// An internal service error occurred during the processing of your request. Try again
        /// later.
        /// 
        /// 
        /// The request has invalid or missing parameters.
        /// 
        /// REST API Reference for DescribeConnectors Operation
        public virtual Task DescribeConnectorsAsync(DescribeConnectorsRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = DescribeConnectorsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = DescribeConnectorsResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  DescribeFlow
        internal virtual DescribeFlowResponse DescribeFlow(DescribeFlowRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = DescribeFlowRequestMarshaller.Instance;
            options.ResponseUnmarshaller = DescribeFlowResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Provides a description of the specified flow.
        /// 
        /// Container for the necessary parameters to execute the DescribeFlow service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the DescribeFlow service method, as returned by Appflow.
        /// 
        /// An internal service error occurred during the processing of your request. Try again
        /// later.
        /// 
        /// 
        /// The resource specified in the request (such as the source or destination connector
        /// profile) is not found.
        /// 
        /// REST API Reference for DescribeFlow Operation
        public virtual Task DescribeFlowAsync(DescribeFlowRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = DescribeFlowRequestMarshaller.Instance;
            options.ResponseUnmarshaller = DescribeFlowResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  DescribeFlowExecutionRecords
        internal virtual DescribeFlowExecutionRecordsResponse DescribeFlowExecutionRecords(DescribeFlowExecutionRecordsRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = DescribeFlowExecutionRecordsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = DescribeFlowExecutionRecordsResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Fetches the execution history of the flow.
        /// 
        /// Container for the necessary parameters to execute the DescribeFlowExecutionRecords service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the DescribeFlowExecutionRecords service method, as returned by Appflow.
        /// 
        /// An internal service error occurred during the processing of your request. Try again
        /// later.
        /// 
        /// 
        /// The resource specified in the request (such as the source or destination connector
        /// profile) is not found.
        /// 
        /// 
        /// The request has invalid or missing parameters.
        /// 
        /// REST API Reference for DescribeFlowExecutionRecords Operation
        public virtual Task DescribeFlowExecutionRecordsAsync(DescribeFlowExecutionRecordsRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = DescribeFlowExecutionRecordsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = DescribeFlowExecutionRecordsResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  ListConnectorEntities
        internal virtual ListConnectorEntitiesResponse ListConnectorEntities(ListConnectorEntitiesRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ListConnectorEntitiesRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ListConnectorEntitiesResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Returns the list of available connector entities supported by Amazon AppFlow. For
        /// example, you can query Salesforce for Account and Opportunity entities,
        /// or query ServiceNow for the Incident entity.
        /// 
        /// Container for the necessary parameters to execute the ListConnectorEntities service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the ListConnectorEntities service method, as returned by Appflow.
        /// 
        /// An error occurred when authenticating with the connector endpoint.
        /// 
        /// 
        /// An error occurred when retrieving data from the connector endpoint.
        /// 
        /// 
        /// An internal service error occurred during the processing of your request. Try again
        /// later.
        /// 
        /// 
        /// The resource specified in the request (such as the source or destination connector
        /// profile) is not found.
        /// 
        /// 
        /// The request has invalid or missing parameters.
        /// 
        /// REST API Reference for ListConnectorEntities Operation
        public virtual Task ListConnectorEntitiesAsync(ListConnectorEntitiesRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ListConnectorEntitiesRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ListConnectorEntitiesResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  ListConnectors
        internal virtual ListConnectorsResponse ListConnectors(ListConnectorsRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ListConnectorsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ListConnectorsResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Returns the list of all registered custom connectors in your Amazon Web Services account.
        /// This API lists only custom connectors registered in this account, not the Amazon Web
        /// Services authored connectors.
        /// 
        /// Container for the necessary parameters to execute the ListConnectors service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the ListConnectors service method, as returned by Appflow.
        /// 
        /// An internal service error occurred during the processing of your request. Try again
        /// later.
        /// 
        /// 
        /// The request has invalid or missing parameters.
        /// 
        /// REST API Reference for ListConnectors Operation
        public virtual Task ListConnectorsAsync(ListConnectorsRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ListConnectorsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ListConnectorsResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  ListFlows
        internal virtual ListFlowsResponse ListFlows(ListFlowsRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ListFlowsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ListFlowsResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Lists all of the flows associated with your account.
        /// 
        /// Container for the necessary parameters to execute the ListFlows service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the ListFlows service method, as returned by Appflow.
        /// 
        /// An internal service error occurred during the processing of your request. Try again
        /// later.
        /// 
        /// 
        /// The request has invalid or missing parameters.
        /// 
        /// REST API Reference for ListFlows Operation
        public virtual Task ListFlowsAsync(ListFlowsRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ListFlowsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ListFlowsResponseUnmarshaller.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);
        }
        /// 
        /// Retrieves the tags that are associated with a specified flow.
        /// 
        /// 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 Appflow.
        /// 
        /// An internal service error occurred during the processing of your request. Try again
        /// later.
        /// 
        /// 
        /// The resource specified in the request (such as the source or destination connector
        /// profile) is not found.
        /// 
        /// 
        /// The request has invalid or missing parameters.
        /// 
        /// 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  RegisterConnector
        internal virtual RegisterConnectorResponse RegisterConnector(RegisterConnectorRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = RegisterConnectorRequestMarshaller.Instance;
            options.ResponseUnmarshaller = RegisterConnectorResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Registers a new custom connector with your Amazon Web Services account. Before you
        /// can register the connector, you must deploy the associated AWS lambda function in
        /// your account.
        /// 
        /// Container for the necessary parameters to execute the RegisterConnector service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the RegisterConnector service method, as returned by Appflow.
        /// 
        /// AppFlow/Requester has invalid or missing permissions.
        /// 
        /// 
        /// There was a conflict when processing the request (for example, a flow with the given
        /// name already exists within the account. Check for conflicting resource names and try
        /// again.
        /// 
        /// 
        /// An error occurred when authenticating with the connector endpoint.
        /// 
        /// 
        /// An error occurred when retrieving data from the connector endpoint.
        /// 
        /// 
        /// An internal service error occurred during the processing of your request. Try again
        /// later.
        /// 
        /// 
        /// The resource specified in the request (such as the source or destination connector
        /// profile) is not found.
        /// 
        /// 
        /// The request would cause a service quota (such as the number of flows) to be exceeded.
        /// 
        /// 
        /// API calls have exceeded the maximum allowed API request rate per account and per Region.
        /// 
        /// 
        /// The request has invalid or missing parameters.
        /// 
        /// REST API Reference for RegisterConnector Operation
        public virtual Task RegisterConnectorAsync(RegisterConnectorRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = RegisterConnectorRequestMarshaller.Instance;
            options.ResponseUnmarshaller = RegisterConnectorResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  ResetConnectorMetadataCache
        internal virtual ResetConnectorMetadataCacheResponse ResetConnectorMetadataCache(ResetConnectorMetadataCacheRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ResetConnectorMetadataCacheRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ResetConnectorMetadataCacheResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Resets metadata about your connector entities that Amazon AppFlow stored in its cache.
        /// Use this action when you want Amazon AppFlow to return the latest information about
        /// the data that you have in a source application.
        /// 
        ///  
        /// 
        /// Amazon AppFlow returns metadata about your entities when you use the ListConnectorEntities
        /// or DescribeConnectorEntities actions. Following these actions, Amazon AppFlow caches
        /// the metadata to reduce the number of API requests that it must send to the source
        /// application. Amazon AppFlow automatically resets the cache once every hour, but you
        /// can use this action when you want to get the latest metadata right away.
        /// 
        /// 
        /// Container for the necessary parameters to execute the ResetConnectorMetadataCache service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the ResetConnectorMetadataCache service method, as returned by Appflow.
        /// 
        /// There was a conflict when processing the request (for example, a flow with the given
        /// name already exists within the account. Check for conflicting resource names and try
        /// again.
        /// 
        /// 
        /// An internal service error occurred during the processing of your request. Try again
        /// later.
        /// 
        /// 
        /// The resource specified in the request (such as the source or destination connector
        /// profile) is not found.
        /// 
        /// 
        /// The request has invalid or missing parameters.
        /// 
        /// REST API Reference for ResetConnectorMetadataCache Operation
        public virtual Task ResetConnectorMetadataCacheAsync(ResetConnectorMetadataCacheRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ResetConnectorMetadataCacheRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ResetConnectorMetadataCacheResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  StartFlow
        internal virtual StartFlowResponse StartFlow(StartFlowRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = StartFlowRequestMarshaller.Instance;
            options.ResponseUnmarshaller = StartFlowResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Activates an existing flow. For on-demand flows, this operation runs the flow immediately.
        /// For schedule and event-triggered flows, this operation activates the flow.
        /// 
        /// Container for the necessary parameters to execute the StartFlow service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the StartFlow service method, as returned by Appflow.
        /// 
        /// There was a conflict when processing the request (for example, a flow with the given
        /// name already exists within the account. Check for conflicting resource names and try
        /// again.
        /// 
        /// 
        /// An internal service error occurred during the processing of your request. Try again
        /// later.
        /// 
        /// 
        /// The resource specified in the request (such as the source or destination connector
        /// profile) is not found.
        /// 
        /// 
        /// The request would cause a service quota (such as the number of flows) to be exceeded.
        /// 
        /// REST API Reference for StartFlow Operation
        public virtual Task StartFlowAsync(StartFlowRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = StartFlowRequestMarshaller.Instance;
            options.ResponseUnmarshaller = StartFlowResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  StopFlow
        internal virtual StopFlowResponse StopFlow(StopFlowRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = StopFlowRequestMarshaller.Instance;
            options.ResponseUnmarshaller = StopFlowResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Deactivates the existing flow. For on-demand flows, this operation returns an unsupportedOperationException
        /// error message. For schedule and event-triggered flows, this operation deactivates
        /// the flow.
        /// 
        /// Container for the necessary parameters to execute the StopFlow service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the StopFlow service method, as returned by Appflow.
        /// 
        /// There was a conflict when processing the request (for example, a flow with the given
        /// name already exists within the account. Check for conflicting resource names and try
        /// again.
        /// 
        /// 
        /// An internal service error occurred during the processing of your request. Try again
        /// later.
        /// 
        /// 
        /// The resource specified in the request (such as the source or destination connector
        /// profile) is not found.
        /// 
        /// 
        /// The requested operation is not supported for the current flow.
        /// 
        /// REST API Reference for StopFlow Operation
        public virtual Task StopFlowAsync(StopFlowRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = StopFlowRequestMarshaller.Instance;
            options.ResponseUnmarshaller = StopFlowResponseUnmarshaller.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);
        }
        /// 
        /// Applies a tag to the specified flow.
        /// 
        /// 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 Appflow.
        /// 
        /// An internal service error occurred during the processing of your request. Try again
        /// later.
        /// 
        /// 
        /// The resource specified in the request (such as the source or destination connector
        /// profile) is not found.
        /// 
        /// 
        /// The request has invalid or missing parameters.
        /// 
        /// 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  UnregisterConnector
        internal virtual UnregisterConnectorResponse UnregisterConnector(UnregisterConnectorRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = UnregisterConnectorRequestMarshaller.Instance;
            options.ResponseUnmarshaller = UnregisterConnectorResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Unregisters the custom connector registered in your account that matches the connector
        /// label provided in the request.
        /// 
        /// Container for the necessary parameters to execute the UnregisterConnector service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the UnregisterConnector service method, as returned by Appflow.
        /// 
        /// There was a conflict when processing the request (for example, a flow with the given
        /// name already exists within the account. Check for conflicting resource names and try
        /// again.
        /// 
        /// 
        /// An internal service error occurred during the processing of your request. Try again
        /// later.
        /// 
        /// 
        /// The resource specified in the request (such as the source or destination connector
        /// profile) is not found.
        /// 
        /// REST API Reference for UnregisterConnector Operation
        public virtual Task UnregisterConnectorAsync(UnregisterConnectorRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = UnregisterConnectorRequestMarshaller.Instance;
            options.ResponseUnmarshaller = UnregisterConnectorResponseUnmarshaller.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);
        }
        /// 
        /// Removes a tag from the specified flow.
        /// 
        /// 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 Appflow.
        /// 
        /// An internal service error occurred during the processing of your request. Try again
        /// later.
        /// 
        /// 
        /// The resource specified in the request (such as the source or destination connector
        /// profile) is not found.
        /// 
        /// 
        /// The request has invalid or missing parameters.
        /// 
        /// 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  UpdateConnectorProfile
        internal virtual UpdateConnectorProfileResponse UpdateConnectorProfile(UpdateConnectorProfileRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = UpdateConnectorProfileRequestMarshaller.Instance;
            options.ResponseUnmarshaller = UpdateConnectorProfileResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Updates a given connector profile associated with your account.
        /// 
        /// Container for the necessary parameters to execute the UpdateConnectorProfile service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the UpdateConnectorProfile service method, as returned by Appflow.
        /// 
        /// There was a conflict when processing the request (for example, a flow with the given
        /// name already exists within the account. Check for conflicting resource names and try
        /// again.
        /// 
        /// 
        /// An error occurred when authenticating with the connector endpoint.
        /// 
        /// 
        /// An internal service error occurred during the processing of your request. Try again
        /// later.
        /// 
        /// 
        /// The resource specified in the request (such as the source or destination connector
        /// profile) is not found.
        /// 
        /// 
        /// The request has invalid or missing parameters.
        /// 
        /// REST API Reference for UpdateConnectorProfile Operation
        public virtual Task UpdateConnectorProfileAsync(UpdateConnectorProfileRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = UpdateConnectorProfileRequestMarshaller.Instance;
            options.ResponseUnmarshaller = UpdateConnectorProfileResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  UpdateConnectorRegistration
        internal virtual UpdateConnectorRegistrationResponse UpdateConnectorRegistration(UpdateConnectorRegistrationRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = UpdateConnectorRegistrationRequestMarshaller.Instance;
            options.ResponseUnmarshaller = UpdateConnectorRegistrationResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Updates a custom connector that you've previously registered. This operation updates
        /// the connector with one of the following:
        /// 
        ///   -  
        /// 
        /// The latest version of the AWS Lambda function that's assigned to the connector
        /// 
        ///  
-  
        /// 
        /// A new AWS Lambda function that you specify
        /// 
        ///  
/// 
        /// Container for the necessary parameters to execute the UpdateConnectorRegistration service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the UpdateConnectorRegistration service method, as returned by Appflow.
        /// 
        /// AppFlow/Requester has invalid or missing permissions.
        /// 
        /// 
        /// There was a conflict when processing the request (for example, a flow with the given
        /// name already exists within the account. Check for conflicting resource names and try
        /// again.
        /// 
        /// 
        /// An error occurred when authenticating with the connector endpoint.
        /// 
        /// 
        /// An error occurred when retrieving data from the connector endpoint.
        /// 
        /// 
        /// An internal service error occurred during the processing of your request. Try again
        /// later.
        /// 
        /// 
        /// The resource specified in the request (such as the source or destination connector
        /// profile) is not found.
        /// 
        /// 
        /// The request would cause a service quota (such as the number of flows) to be exceeded.
        /// 
        /// 
        /// API calls have exceeded the maximum allowed API request rate per account and per Region.
        /// 
        /// 
        /// The request has invalid or missing parameters.
        /// 
        /// REST API Reference for UpdateConnectorRegistration Operation
        public virtual Task UpdateConnectorRegistrationAsync(UpdateConnectorRegistrationRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = UpdateConnectorRegistrationRequestMarshaller.Instance;
            options.ResponseUnmarshaller = UpdateConnectorRegistrationResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  UpdateFlow
        internal virtual UpdateFlowResponse UpdateFlow(UpdateFlowRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = UpdateFlowRequestMarshaller.Instance;
            options.ResponseUnmarshaller = UpdateFlowResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Updates an existing flow.
        /// 
        /// Container for the necessary parameters to execute the UpdateFlow service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the UpdateFlow service method, as returned by Appflow.
        /// 
        /// There was a conflict when processing the request (for example, a flow with the given
        /// name already exists within the account. Check for conflicting resource names and try
        /// again.
        /// 
        /// 
        /// An error occurred when authenticating with the connector endpoint.
        /// 
        /// 
        /// An error occurred when retrieving data from the connector endpoint.
        /// 
        /// 
        /// An internal service error occurred during the processing of your request. Try again
        /// later.
        /// 
        /// 
        /// The resource specified in the request (such as the source or destination connector
        /// profile) is not found.
        /// 
        /// 
        /// The request would cause a service quota (such as the number of flows) to be exceeded.
        /// 
        /// 
        /// The request has invalid or missing parameters.
        /// 
        /// REST API Reference for UpdateFlow Operation
        public virtual Task UpdateFlowAsync(UpdateFlowRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = UpdateFlowRequestMarshaller.Instance;
            options.ResponseUnmarshaller = UpdateFlowResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
    }
}