/*
 * 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 appintegrations-2020-07-29.normal.json service model.
 */
using System;
using System.Collections.Generic;
using System.Net;
using Amazon.AppIntegrationsService.Model;
using Amazon.AppIntegrationsService.Model.Internal.MarshallTransformations;
using Amazon.AppIntegrationsService.Internal;
using Amazon.Runtime;
using Amazon.Runtime.Internal;
using Amazon.Runtime.Internal.Auth;
using Amazon.Runtime.Internal.Transform;
namespace Amazon.AppIntegrationsService
{
    /// 
    /// Implementation for accessing AppIntegrationsService
    ///
    /// The Amazon AppIntegrations service enables you to configure and reuse connections
    /// to external applications.
    /// 
    ///  
    /// 
    /// For information about how you can use external applications with Amazon Connect, see
    /// Set up pre-built
    /// integrations and Deliver
    /// information to agents using Amazon Connect Wisdom in the Amazon Connect Administrator
    /// Guide.
    /// 
    /// 
    public partial class AmazonAppIntegrationsServiceClient : AmazonServiceClient, IAmazonAppIntegrationsService
    {
        private static IServiceMetadata serviceMetadata = new AmazonAppIntegrationsServiceMetadata();
        #region Constructors
        /// 
        /// Constructs AmazonAppIntegrationsServiceClient 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 AmazonAppIntegrationsServiceClient()
            : base(FallbackCredentialsFactory.GetCredentials(), new AmazonAppIntegrationsServiceConfig()) { }
        /// 
        /// Constructs AmazonAppIntegrationsServiceClient 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 AmazonAppIntegrationsServiceClient(RegionEndpoint region)
            : base(FallbackCredentialsFactory.GetCredentials(), new AmazonAppIntegrationsServiceConfig{RegionEndpoint = region}) { }
        /// 
        /// Constructs AmazonAppIntegrationsServiceClient 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 AmazonAppIntegrationsServiceClient Configuration Object
        public AmazonAppIntegrationsServiceClient(AmazonAppIntegrationsServiceConfig config)
            : base(FallbackCredentialsFactory.GetCredentials(config), config){}
        /// 
        /// Constructs AmazonAppIntegrationsServiceClient with AWS Credentials
        /// 
        /// AWS Credentials
        public AmazonAppIntegrationsServiceClient(AWSCredentials credentials)
            : this(credentials, new AmazonAppIntegrationsServiceConfig())
        {
        }
        /// 
        /// Constructs AmazonAppIntegrationsServiceClient with AWS Credentials
        /// 
        /// AWS Credentials
        /// The region to connect.
        public AmazonAppIntegrationsServiceClient(AWSCredentials credentials, RegionEndpoint region)
            : this(credentials, new AmazonAppIntegrationsServiceConfig{RegionEndpoint = region})
        {
        }
        /// 
        /// Constructs AmazonAppIntegrationsServiceClient with AWS Credentials and an
        /// AmazonAppIntegrationsServiceClient Configuration object.
        /// 
        /// AWS Credentials
        /// The AmazonAppIntegrationsServiceClient Configuration Object
        public AmazonAppIntegrationsServiceClient(AWSCredentials credentials, AmazonAppIntegrationsServiceConfig clientConfig)
            : base(credentials, clientConfig)
        {
        }
        /// 
        /// Constructs AmazonAppIntegrationsServiceClient with AWS Access Key ID and AWS Secret Key
        /// 
        /// AWS Access Key ID
        /// AWS Secret Access Key
        public AmazonAppIntegrationsServiceClient(string awsAccessKeyId, string awsSecretAccessKey)
            : this(awsAccessKeyId, awsSecretAccessKey, new AmazonAppIntegrationsServiceConfig())
        {
        }
        /// 
        /// Constructs AmazonAppIntegrationsServiceClient with AWS Access Key ID and AWS Secret Key
        /// 
        /// AWS Access Key ID
        /// AWS Secret Access Key
        /// The region to connect.
        public AmazonAppIntegrationsServiceClient(string awsAccessKeyId, string awsSecretAccessKey, RegionEndpoint region)
            : this(awsAccessKeyId, awsSecretAccessKey, new AmazonAppIntegrationsServiceConfig() {RegionEndpoint=region})
        {
        }
        /// 
        /// Constructs AmazonAppIntegrationsServiceClient with AWS Access Key ID, AWS Secret Key and an
        /// AmazonAppIntegrationsServiceClient Configuration object. 
        /// 
        /// AWS Access Key ID
        /// AWS Secret Access Key
        /// The AmazonAppIntegrationsServiceClient Configuration Object
        public AmazonAppIntegrationsServiceClient(string awsAccessKeyId, string awsSecretAccessKey, AmazonAppIntegrationsServiceConfig clientConfig)
            : base(awsAccessKeyId, awsSecretAccessKey, clientConfig)
        {
        }
        /// 
        /// Constructs AmazonAppIntegrationsServiceClient with AWS Access Key ID and AWS Secret Key
        /// 
        /// AWS Access Key ID
        /// AWS Secret Access Key
        /// AWS Session Token
        public AmazonAppIntegrationsServiceClient(string awsAccessKeyId, string awsSecretAccessKey, string awsSessionToken)
            : this(awsAccessKeyId, awsSecretAccessKey, awsSessionToken, new AmazonAppIntegrationsServiceConfig())
        {
        }
        /// 
        /// Constructs AmazonAppIntegrationsServiceClient 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 AmazonAppIntegrationsServiceClient(string awsAccessKeyId, string awsSecretAccessKey, string awsSessionToken, RegionEndpoint region)
            : this(awsAccessKeyId, awsSecretAccessKey, awsSessionToken, new AmazonAppIntegrationsServiceConfig{RegionEndpoint = region})
        {
        }
        /// 
        /// Constructs AmazonAppIntegrationsServiceClient with AWS Access Key ID, AWS Secret Key and an
        /// AmazonAppIntegrationsServiceClient Configuration object. 
        /// 
        /// AWS Access Key ID
        /// AWS Secret Access Key
        /// AWS Session Token
        /// The AmazonAppIntegrationsServiceClient Configuration Object
        public AmazonAppIntegrationsServiceClient(string awsAccessKeyId, string awsSecretAccessKey, string awsSessionToken, AmazonAppIntegrationsServiceConfig clientConfig)
            : base(awsAccessKeyId, awsSecretAccessKey, awsSessionToken, clientConfig)
        {
        }
        #endregion
        #region Overrides
        
        /// 
        /// Creates the signer for the service.
        /// 
        protected override AbstractAWSSigner CreateSigner()
        {
            return new AWS4Signer();
        }
        /// 
        /// Customize the pipeline
        /// 
        /// 
        protected override void CustomizeRuntimePipeline(RuntimePipeline pipeline)
        {
            pipeline.RemoveHandler();
            pipeline.AddHandlerAfter(new AmazonAppIntegrationsServiceEndpointResolver());
        }
        /// 
        /// 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  CreateDataIntegration
        /// 
        /// Creates and persists a DataIntegration resource.
        /// 
        ///   
        /// 
        /// You cannot create a DataIntegration association for a DataIntegration that has been
        /// previously associated. Use a different DataIntegration, or recreate the DataIntegration
        /// using the CreateDataIntegration API.
        /// 
        ///  
        /// 
        /// Container for the necessary parameters to execute the CreateDataIntegration service method.
        /// 
        /// The response from the CreateDataIntegration service method, as returned by AppIntegrationsService.
        /// 
        /// You do not have sufficient access to perform this action.
        /// 
        /// 
        /// A resource with the specified name already exists.
        /// 
        /// 
        /// Request processing failed due to an error or failure with the service.
        /// 
        /// 
        /// The request is not valid.
        /// 
        /// 
        /// The allowed quota for the resource has been exceeded.
        /// 
        /// 
        /// The throttling limit has been exceeded.
        /// 
        /// REST API Reference for CreateDataIntegration Operation
        public virtual CreateDataIntegrationResponse CreateDataIntegration(CreateDataIntegrationRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateDataIntegrationRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateDataIntegrationResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Initiates the asynchronous execution of the CreateDataIntegration operation.
        /// 
        /// 
        /// Container for the necessary parameters to execute the CreateDataIntegration operation on AmazonAppIntegrationsServiceClient.
        /// An AsyncCallback delegate that is invoked when the operation completes.
        /// A user-defined state object that is passed to the callback procedure. Retrieve this object from within the callback
        ///          procedure using the AsyncState property.
        /// 
        /// An IAsyncResult that can be used to poll or wait for results, or both; this value is also needed when invoking EndCreateDataIntegration
        ///         operation.
        /// REST API Reference for CreateDataIntegration Operation
        public virtual IAsyncResult BeginCreateDataIntegration(CreateDataIntegrationRequest request, AsyncCallback callback, object state)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateDataIntegrationRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateDataIntegrationResponseUnmarshaller.Instance;
            return BeginInvoke(request, options, callback, state);
        }
        /// 
        /// Finishes the asynchronous execution of the  CreateDataIntegration operation.
        /// 
        /// 
        /// The IAsyncResult returned by the call to BeginCreateDataIntegration.
        /// 
        /// Returns a  CreateDataIntegrationResult from AppIntegrationsService.
        /// REST API Reference for CreateDataIntegration Operation
        public virtual CreateDataIntegrationResponse EndCreateDataIntegration(IAsyncResult asyncResult)
        {
            return EndInvoke(asyncResult);
        }
        #endregion
        
        #region  CreateEventIntegration
        /// 
        /// Creates an EventIntegration, given a specified name, description, and a reference
        /// to an Amazon EventBridge bus in your account and a partner event source that pushes
        /// events to that bus. No objects are created in the your account, only metadata that
        /// is persisted on the EventIntegration control plane.
        /// 
        /// Container for the necessary parameters to execute the CreateEventIntegration service method.
        /// 
        /// The response from the CreateEventIntegration service method, as returned by AppIntegrationsService.
        /// 
        /// You do not have sufficient access to perform this action.
        /// 
        /// 
        /// A resource with the specified name already exists.
        /// 
        /// 
        /// Request processing failed due to an error or failure with the service.
        /// 
        /// 
        /// The request is not valid.
        /// 
        /// 
        /// The allowed quota for the resource has been exceeded.
        /// 
        /// 
        /// The throttling limit has been exceeded.
        /// 
        /// REST API Reference for CreateEventIntegration Operation
        public virtual CreateEventIntegrationResponse CreateEventIntegration(CreateEventIntegrationRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateEventIntegrationRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateEventIntegrationResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Initiates the asynchronous execution of the CreateEventIntegration operation.
        /// 
        /// 
        /// Container for the necessary parameters to execute the CreateEventIntegration operation on AmazonAppIntegrationsServiceClient.
        /// An AsyncCallback delegate that is invoked when the operation completes.
        /// A user-defined state object that is passed to the callback procedure. Retrieve this object from within the callback
        ///          procedure using the AsyncState property.
        /// 
        /// An IAsyncResult that can be used to poll or wait for results, or both; this value is also needed when invoking EndCreateEventIntegration
        ///         operation.
        /// REST API Reference for CreateEventIntegration Operation
        public virtual IAsyncResult BeginCreateEventIntegration(CreateEventIntegrationRequest request, AsyncCallback callback, object state)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateEventIntegrationRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateEventIntegrationResponseUnmarshaller.Instance;
            return BeginInvoke(request, options, callback, state);
        }
        /// 
        /// Finishes the asynchronous execution of the  CreateEventIntegration operation.
        /// 
        /// 
        /// The IAsyncResult returned by the call to BeginCreateEventIntegration.
        /// 
        /// Returns a  CreateEventIntegrationResult from AppIntegrationsService.
        /// REST API Reference for CreateEventIntegration Operation
        public virtual CreateEventIntegrationResponse EndCreateEventIntegration(IAsyncResult asyncResult)
        {
            return EndInvoke(asyncResult);
        }
        #endregion
        
        #region  DeleteDataIntegration
        /// 
        /// Deletes the DataIntegration. Only DataIntegrations that don't have any DataIntegrationAssociations
        /// can be deleted. Deleting a DataIntegration also deletes the underlying Amazon AppFlow
        /// flow and service linked role. 
        /// 
        ///   
        /// 
        /// You cannot create a DataIntegration association for a DataIntegration that has been
        /// previously associated. Use a different DataIntegration, or recreate the DataIntegration
        /// using the CreateDataIntegration
        /// API.
        /// 
        ///  
        /// 
        /// Container for the necessary parameters to execute the DeleteDataIntegration service method.
        /// 
        /// The response from the DeleteDataIntegration service method, as returned by AppIntegrationsService.
        /// 
        /// You do not have sufficient access to perform this action.
        /// 
        /// 
        /// Request processing failed due to an error or failure with the service.
        /// 
        /// 
        /// The request is not valid.
        /// 
        /// 
        /// The specified resource was not found.
        /// 
        /// 
        /// The throttling limit has been exceeded.
        /// 
        /// REST API Reference for DeleteDataIntegration Operation
        public virtual DeleteDataIntegrationResponse DeleteDataIntegration(DeleteDataIntegrationRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = DeleteDataIntegrationRequestMarshaller.Instance;
            options.ResponseUnmarshaller = DeleteDataIntegrationResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Initiates the asynchronous execution of the DeleteDataIntegration operation.
        /// 
        /// 
        /// Container for the necessary parameters to execute the DeleteDataIntegration operation on AmazonAppIntegrationsServiceClient.
        /// An AsyncCallback delegate that is invoked when the operation completes.
        /// A user-defined state object that is passed to the callback procedure. Retrieve this object from within the callback
        ///          procedure using the AsyncState property.
        /// 
        /// An IAsyncResult that can be used to poll or wait for results, or both; this value is also needed when invoking EndDeleteDataIntegration
        ///         operation.
        /// REST API Reference for DeleteDataIntegration Operation
        public virtual IAsyncResult BeginDeleteDataIntegration(DeleteDataIntegrationRequest request, AsyncCallback callback, object state)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = DeleteDataIntegrationRequestMarshaller.Instance;
            options.ResponseUnmarshaller = DeleteDataIntegrationResponseUnmarshaller.Instance;
            return BeginInvoke(request, options, callback, state);
        }
        /// 
        /// Finishes the asynchronous execution of the  DeleteDataIntegration operation.
        /// 
        /// 
        /// The IAsyncResult returned by the call to BeginDeleteDataIntegration.
        /// 
        /// Returns a  DeleteDataIntegrationResult from AppIntegrationsService.
        /// REST API Reference for DeleteDataIntegration Operation
        public virtual DeleteDataIntegrationResponse EndDeleteDataIntegration(IAsyncResult asyncResult)
        {
            return EndInvoke(asyncResult);
        }
        #endregion
        
        #region  DeleteEventIntegration
        /// 
        /// Deletes the specified existing event integration. If the event integration is associated
        /// with clients, the request is rejected.
        /// 
        /// Container for the necessary parameters to execute the DeleteEventIntegration service method.
        /// 
        /// The response from the DeleteEventIntegration service method, as returned by AppIntegrationsService.
        /// 
        /// You do not have sufficient access to perform this action.
        /// 
        /// 
        /// Request processing failed due to an error or failure with the service.
        /// 
        /// 
        /// The request is not valid.
        /// 
        /// 
        /// The specified resource was not found.
        /// 
        /// 
        /// The throttling limit has been exceeded.
        /// 
        /// REST API Reference for DeleteEventIntegration Operation
        public virtual DeleteEventIntegrationResponse DeleteEventIntegration(DeleteEventIntegrationRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = DeleteEventIntegrationRequestMarshaller.Instance;
            options.ResponseUnmarshaller = DeleteEventIntegrationResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Initiates the asynchronous execution of the DeleteEventIntegration operation.
        /// 
        /// 
        /// Container for the necessary parameters to execute the DeleteEventIntegration operation on AmazonAppIntegrationsServiceClient.
        /// An AsyncCallback delegate that is invoked when the operation completes.
        /// A user-defined state object that is passed to the callback procedure. Retrieve this object from within the callback
        ///          procedure using the AsyncState property.
        /// 
        /// An IAsyncResult that can be used to poll or wait for results, or both; this value is also needed when invoking EndDeleteEventIntegration
        ///         operation.
        /// REST API Reference for DeleteEventIntegration Operation
        public virtual IAsyncResult BeginDeleteEventIntegration(DeleteEventIntegrationRequest request, AsyncCallback callback, object state)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = DeleteEventIntegrationRequestMarshaller.Instance;
            options.ResponseUnmarshaller = DeleteEventIntegrationResponseUnmarshaller.Instance;
            return BeginInvoke(request, options, callback, state);
        }
        /// 
        /// Finishes the asynchronous execution of the  DeleteEventIntegration operation.
        /// 
        /// 
        /// The IAsyncResult returned by the call to BeginDeleteEventIntegration.
        /// 
        /// Returns a  DeleteEventIntegrationResult from AppIntegrationsService.
        /// REST API Reference for DeleteEventIntegration Operation
        public virtual DeleteEventIntegrationResponse EndDeleteEventIntegration(IAsyncResult asyncResult)
        {
            return EndInvoke(asyncResult);
        }
        #endregion
        
        #region  GetDataIntegration
        /// 
        /// Returns information about the DataIntegration.
        /// 
        ///   
        /// 
        /// You cannot create a DataIntegration association for a DataIntegration that has been
        /// previously associated. Use a different DataIntegration, or recreate the DataIntegration
        /// using the CreateDataIntegration
        /// API.
        /// 
        ///  
        /// 
        /// Container for the necessary parameters to execute the GetDataIntegration service method.
        /// 
        /// The response from the GetDataIntegration service method, as returned by AppIntegrationsService.
        /// 
        /// You do not have sufficient access to perform this action.
        /// 
        /// 
        /// Request processing failed due to an error or failure with the service.
        /// 
        /// 
        /// The request is not valid.
        /// 
        /// 
        /// The specified resource was not found.
        /// 
        /// 
        /// The throttling limit has been exceeded.
        /// 
        /// REST API Reference for GetDataIntegration Operation
        public virtual GetDataIntegrationResponse GetDataIntegration(GetDataIntegrationRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = GetDataIntegrationRequestMarshaller.Instance;
            options.ResponseUnmarshaller = GetDataIntegrationResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Initiates the asynchronous execution of the GetDataIntegration operation.
        /// 
        /// 
        /// Container for the necessary parameters to execute the GetDataIntegration operation on AmazonAppIntegrationsServiceClient.
        /// An AsyncCallback delegate that is invoked when the operation completes.
        /// A user-defined state object that is passed to the callback procedure. Retrieve this object from within the callback
        ///          procedure using the AsyncState property.
        /// 
        /// An IAsyncResult that can be used to poll or wait for results, or both; this value is also needed when invoking EndGetDataIntegration
        ///         operation.
        /// REST API Reference for GetDataIntegration Operation
        public virtual IAsyncResult BeginGetDataIntegration(GetDataIntegrationRequest request, AsyncCallback callback, object state)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = GetDataIntegrationRequestMarshaller.Instance;
            options.ResponseUnmarshaller = GetDataIntegrationResponseUnmarshaller.Instance;
            return BeginInvoke(request, options, callback, state);
        }
        /// 
        /// Finishes the asynchronous execution of the  GetDataIntegration operation.
        /// 
        /// 
        /// The IAsyncResult returned by the call to BeginGetDataIntegration.
        /// 
        /// Returns a  GetDataIntegrationResult from AppIntegrationsService.
        /// REST API Reference for GetDataIntegration Operation
        public virtual GetDataIntegrationResponse EndGetDataIntegration(IAsyncResult asyncResult)
        {
            return EndInvoke(asyncResult);
        }
        #endregion
        
        #region  GetEventIntegration
        /// 
        /// Returns information about the event integration.
        /// 
        /// Container for the necessary parameters to execute the GetEventIntegration service method.
        /// 
        /// The response from the GetEventIntegration service method, as returned by AppIntegrationsService.
        /// 
        /// You do not have sufficient access to perform this action.
        /// 
        /// 
        /// Request processing failed due to an error or failure with the service.
        /// 
        /// 
        /// The request is not valid.
        /// 
        /// 
        /// The specified resource was not found.
        /// 
        /// 
        /// The throttling limit has been exceeded.
        /// 
        /// REST API Reference for GetEventIntegration Operation
        public virtual GetEventIntegrationResponse GetEventIntegration(GetEventIntegrationRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = GetEventIntegrationRequestMarshaller.Instance;
            options.ResponseUnmarshaller = GetEventIntegrationResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Initiates the asynchronous execution of the GetEventIntegration operation.
        /// 
        /// 
        /// Container for the necessary parameters to execute the GetEventIntegration operation on AmazonAppIntegrationsServiceClient.
        /// An AsyncCallback delegate that is invoked when the operation completes.
        /// A user-defined state object that is passed to the callback procedure. Retrieve this object from within the callback
        ///          procedure using the AsyncState property.
        /// 
        /// An IAsyncResult that can be used to poll or wait for results, or both; this value is also needed when invoking EndGetEventIntegration
        ///         operation.
        /// REST API Reference for GetEventIntegration Operation
        public virtual IAsyncResult BeginGetEventIntegration(GetEventIntegrationRequest request, AsyncCallback callback, object state)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = GetEventIntegrationRequestMarshaller.Instance;
            options.ResponseUnmarshaller = GetEventIntegrationResponseUnmarshaller.Instance;
            return BeginInvoke(request, options, callback, state);
        }
        /// 
        /// Finishes the asynchronous execution of the  GetEventIntegration operation.
        /// 
        /// 
        /// The IAsyncResult returned by the call to BeginGetEventIntegration.
        /// 
        /// Returns a  GetEventIntegrationResult from AppIntegrationsService.
        /// REST API Reference for GetEventIntegration Operation
        public virtual GetEventIntegrationResponse EndGetEventIntegration(IAsyncResult asyncResult)
        {
            return EndInvoke(asyncResult);
        }
        #endregion
        
        #region  ListDataIntegrationAssociations
        /// 
        /// Returns a paginated list of DataIntegration associations in the account.
        /// 
        ///   
        /// 
        /// You cannot create a DataIntegration association for a DataIntegration that has been
        /// previously associated. Use a different DataIntegration, or recreate the DataIntegration
        /// using the CreateDataIntegration
        /// API.
        /// 
        ///  
        /// 
        /// Container for the necessary parameters to execute the ListDataIntegrationAssociations service method.
        /// 
        /// The response from the ListDataIntegrationAssociations service method, as returned by AppIntegrationsService.
        /// 
        /// You do not have sufficient access to perform this action.
        /// 
        /// 
        /// Request processing failed due to an error or failure with the service.
        /// 
        /// 
        /// The request is not valid.
        /// 
        /// 
        /// The specified resource was not found.
        /// 
        /// 
        /// The throttling limit has been exceeded.
        /// 
        /// REST API Reference for ListDataIntegrationAssociations Operation
        public virtual ListDataIntegrationAssociationsResponse ListDataIntegrationAssociations(ListDataIntegrationAssociationsRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ListDataIntegrationAssociationsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ListDataIntegrationAssociationsResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Initiates the asynchronous execution of the ListDataIntegrationAssociations operation.
        /// 
        /// 
        /// Container for the necessary parameters to execute the ListDataIntegrationAssociations operation on AmazonAppIntegrationsServiceClient.
        /// An AsyncCallback delegate that is invoked when the operation completes.
        /// A user-defined state object that is passed to the callback procedure. Retrieve this object from within the callback
        ///          procedure using the AsyncState property.
        /// 
        /// An IAsyncResult that can be used to poll or wait for results, or both; this value is also needed when invoking EndListDataIntegrationAssociations
        ///         operation.
        /// REST API Reference for ListDataIntegrationAssociations Operation
        public virtual IAsyncResult BeginListDataIntegrationAssociations(ListDataIntegrationAssociationsRequest request, AsyncCallback callback, object state)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ListDataIntegrationAssociationsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ListDataIntegrationAssociationsResponseUnmarshaller.Instance;
            return BeginInvoke(request, options, callback, state);
        }
        /// 
        /// Finishes the asynchronous execution of the  ListDataIntegrationAssociations operation.
        /// 
        /// 
        /// The IAsyncResult returned by the call to BeginListDataIntegrationAssociations.
        /// 
        /// Returns a  ListDataIntegrationAssociationsResult from AppIntegrationsService.
        /// REST API Reference for ListDataIntegrationAssociations Operation
        public virtual ListDataIntegrationAssociationsResponse EndListDataIntegrationAssociations(IAsyncResult asyncResult)
        {
            return EndInvoke(asyncResult);
        }
        #endregion
        
        #region  ListDataIntegrations
        /// 
        /// Returns a paginated list of DataIntegrations in the account.
        /// 
        ///   
        /// 
        /// You cannot create a DataIntegration association for a DataIntegration that has been
        /// previously associated. Use a different DataIntegration, or recreate the DataIntegration
        /// using the CreateDataIntegration
        /// API.
        /// 
        ///  
        /// 
        /// Container for the necessary parameters to execute the ListDataIntegrations service method.
        /// 
        /// The response from the ListDataIntegrations service method, as returned by AppIntegrationsService.
        /// 
        /// You do not have sufficient access to perform this action.
        /// 
        /// 
        /// Request processing failed due to an error or failure with the service.
        /// 
        /// 
        /// The request is not valid.
        /// 
        /// 
        /// The throttling limit has been exceeded.
        /// 
        /// REST API Reference for ListDataIntegrations Operation
        public virtual ListDataIntegrationsResponse ListDataIntegrations(ListDataIntegrationsRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ListDataIntegrationsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ListDataIntegrationsResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Initiates the asynchronous execution of the ListDataIntegrations operation.
        /// 
        /// 
        /// Container for the necessary parameters to execute the ListDataIntegrations operation on AmazonAppIntegrationsServiceClient.
        /// An AsyncCallback delegate that is invoked when the operation completes.
        /// A user-defined state object that is passed to the callback procedure. Retrieve this object from within the callback
        ///          procedure using the AsyncState property.
        /// 
        /// An IAsyncResult that can be used to poll or wait for results, or both; this value is also needed when invoking EndListDataIntegrations
        ///         operation.
        /// REST API Reference for ListDataIntegrations Operation
        public virtual IAsyncResult BeginListDataIntegrations(ListDataIntegrationsRequest request, AsyncCallback callback, object state)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ListDataIntegrationsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ListDataIntegrationsResponseUnmarshaller.Instance;
            return BeginInvoke(request, options, callback, state);
        }
        /// 
        /// Finishes the asynchronous execution of the  ListDataIntegrations operation.
        /// 
        /// 
        /// The IAsyncResult returned by the call to BeginListDataIntegrations.
        /// 
        /// Returns a  ListDataIntegrationsResult from AppIntegrationsService.
        /// REST API Reference for ListDataIntegrations Operation
        public virtual ListDataIntegrationsResponse EndListDataIntegrations(IAsyncResult asyncResult)
        {
            return EndInvoke(asyncResult);
        }
        #endregion
        
        #region  ListEventIntegrationAssociations
        /// 
        /// Returns a paginated list of event integration associations in the account.
        /// 
        /// Container for the necessary parameters to execute the ListEventIntegrationAssociations service method.
        /// 
        /// The response from the ListEventIntegrationAssociations service method, as returned by AppIntegrationsService.
        /// 
        /// You do not have sufficient access to perform this action.
        /// 
        /// 
        /// Request processing failed due to an error or failure with the service.
        /// 
        /// 
        /// The request is not valid.
        /// 
        /// 
        /// The specified resource was not found.
        /// 
        /// 
        /// The throttling limit has been exceeded.
        /// 
        /// REST API Reference for ListEventIntegrationAssociations Operation
        public virtual ListEventIntegrationAssociationsResponse ListEventIntegrationAssociations(ListEventIntegrationAssociationsRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ListEventIntegrationAssociationsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ListEventIntegrationAssociationsResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Initiates the asynchronous execution of the ListEventIntegrationAssociations operation.
        /// 
        /// 
        /// Container for the necessary parameters to execute the ListEventIntegrationAssociations operation on AmazonAppIntegrationsServiceClient.
        /// An AsyncCallback delegate that is invoked when the operation completes.
        /// A user-defined state object that is passed to the callback procedure. Retrieve this object from within the callback
        ///          procedure using the AsyncState property.
        /// 
        /// An IAsyncResult that can be used to poll or wait for results, or both; this value is also needed when invoking EndListEventIntegrationAssociations
        ///         operation.
        /// REST API Reference for ListEventIntegrationAssociations Operation
        public virtual IAsyncResult BeginListEventIntegrationAssociations(ListEventIntegrationAssociationsRequest request, AsyncCallback callback, object state)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ListEventIntegrationAssociationsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ListEventIntegrationAssociationsResponseUnmarshaller.Instance;
            return BeginInvoke(request, options, callback, state);
        }
        /// 
        /// Finishes the asynchronous execution of the  ListEventIntegrationAssociations operation.
        /// 
        /// 
        /// The IAsyncResult returned by the call to BeginListEventIntegrationAssociations.
        /// 
        /// Returns a  ListEventIntegrationAssociationsResult from AppIntegrationsService.
        /// REST API Reference for ListEventIntegrationAssociations Operation
        public virtual ListEventIntegrationAssociationsResponse EndListEventIntegrationAssociations(IAsyncResult asyncResult)
        {
            return EndInvoke(asyncResult);
        }
        #endregion
        
        #region  ListEventIntegrations
        /// 
        /// Returns a paginated list of event integrations in the account.
        /// 
        /// Container for the necessary parameters to execute the ListEventIntegrations service method.
        /// 
        /// The response from the ListEventIntegrations service method, as returned by AppIntegrationsService.
        /// 
        /// You do not have sufficient access to perform this action.
        /// 
        /// 
        /// Request processing failed due to an error or failure with the service.
        /// 
        /// 
        /// The request is not valid.
        /// 
        /// 
        /// The throttling limit has been exceeded.
        /// 
        /// REST API Reference for ListEventIntegrations Operation
        public virtual ListEventIntegrationsResponse ListEventIntegrations(ListEventIntegrationsRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ListEventIntegrationsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ListEventIntegrationsResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Initiates the asynchronous execution of the ListEventIntegrations operation.
        /// 
        /// 
        /// Container for the necessary parameters to execute the ListEventIntegrations operation on AmazonAppIntegrationsServiceClient.
        /// An AsyncCallback delegate that is invoked when the operation completes.
        /// A user-defined state object that is passed to the callback procedure. Retrieve this object from within the callback
        ///          procedure using the AsyncState property.
        /// 
        /// An IAsyncResult that can be used to poll or wait for results, or both; this value is also needed when invoking EndListEventIntegrations
        ///         operation.
        /// REST API Reference for ListEventIntegrations Operation
        public virtual IAsyncResult BeginListEventIntegrations(ListEventIntegrationsRequest request, AsyncCallback callback, object state)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ListEventIntegrationsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ListEventIntegrationsResponseUnmarshaller.Instance;
            return BeginInvoke(request, options, callback, state);
        }
        /// 
        /// Finishes the asynchronous execution of the  ListEventIntegrations operation.
        /// 
        /// 
        /// The IAsyncResult returned by the call to BeginListEventIntegrations.
        /// 
        /// Returns a  ListEventIntegrationsResult from AppIntegrationsService.
        /// REST API Reference for ListEventIntegrations Operation
        public virtual ListEventIntegrationsResponse EndListEventIntegrations(IAsyncResult asyncResult)
        {
            return EndInvoke(asyncResult);
        }
        #endregion
        
        #region  ListTagsForResource
        /// 
        /// Lists the tags for the specified resource.
        /// 
        /// Container for the necessary parameters to execute the ListTagsForResource service method.
        /// 
        /// The response from the ListTagsForResource service method, as returned by AppIntegrationsService.
        /// 
        /// Request processing failed due to an error or failure with the service.
        /// 
        /// 
        /// The request is not valid.
        /// 
        /// 
        /// The specified resource was not found.
        /// 
        /// 
        /// The throttling limit has been exceeded.
        /// 
        /// REST API Reference for ListTagsForResource Operation
        public virtual ListTagsForResourceResponse ListTagsForResource(ListTagsForResourceRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ListTagsForResourceRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ListTagsForResourceResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Initiates the asynchronous execution of the ListTagsForResource operation.
        /// 
        /// 
        /// Container for the necessary parameters to execute the ListTagsForResource operation on AmazonAppIntegrationsServiceClient.
        /// An AsyncCallback delegate that is invoked when the operation completes.
        /// A user-defined state object that is passed to the callback procedure. Retrieve this object from within the callback
        ///          procedure using the AsyncState property.
        /// 
        /// An IAsyncResult that can be used to poll or wait for results, or both; this value is also needed when invoking EndListTagsForResource
        ///         operation.
        /// REST API Reference for ListTagsForResource Operation
        public virtual IAsyncResult BeginListTagsForResource(ListTagsForResourceRequest request, AsyncCallback callback, object state)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ListTagsForResourceRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ListTagsForResourceResponseUnmarshaller.Instance;
            return BeginInvoke(request, options, callback, state);
        }
        /// 
        /// Finishes the asynchronous execution of the  ListTagsForResource operation.
        /// 
        /// 
        /// The IAsyncResult returned by the call to BeginListTagsForResource.
        /// 
        /// Returns a  ListTagsForResourceResult from AppIntegrationsService.
        /// REST API Reference for ListTagsForResource Operation
        public virtual ListTagsForResourceResponse EndListTagsForResource(IAsyncResult asyncResult)
        {
            return EndInvoke(asyncResult);
        }
        #endregion
        
        #region  TagResource
        /// 
        /// Adds the specified tags to the specified resource.
        /// 
        /// Container for the necessary parameters to execute the TagResource service method.
        /// 
        /// The response from the TagResource service method, as returned by AppIntegrationsService.
        /// 
        /// Request processing failed due to an error or failure with the service.
        /// 
        /// 
        /// The request is not valid.
        /// 
        /// 
        /// The specified resource was not found.
        /// 
        /// 
        /// The throttling limit has been exceeded.
        /// 
        /// REST API Reference for TagResource Operation
        public virtual TagResourceResponse TagResource(TagResourceRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = TagResourceRequestMarshaller.Instance;
            options.ResponseUnmarshaller = TagResourceResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Initiates the asynchronous execution of the TagResource operation.
        /// 
        /// 
        /// Container for the necessary parameters to execute the TagResource operation on AmazonAppIntegrationsServiceClient.
        /// An AsyncCallback delegate that is invoked when the operation completes.
        /// A user-defined state object that is passed to the callback procedure. Retrieve this object from within the callback
        ///          procedure using the AsyncState property.
        /// 
        /// An IAsyncResult that can be used to poll or wait for results, or both; this value is also needed when invoking EndTagResource
        ///         operation.
        /// REST API Reference for TagResource Operation
        public virtual IAsyncResult BeginTagResource(TagResourceRequest request, AsyncCallback callback, object state)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = TagResourceRequestMarshaller.Instance;
            options.ResponseUnmarshaller = TagResourceResponseUnmarshaller.Instance;
            return BeginInvoke(request, options, callback, state);
        }
        /// 
        /// Finishes the asynchronous execution of the  TagResource operation.
        /// 
        /// 
        /// The IAsyncResult returned by the call to BeginTagResource.
        /// 
        /// Returns a  TagResourceResult from AppIntegrationsService.
        /// REST API Reference for TagResource Operation
        public virtual TagResourceResponse EndTagResource(IAsyncResult asyncResult)
        {
            return EndInvoke(asyncResult);
        }
        #endregion
        
        #region  UntagResource
        /// 
        /// Removes the specified tags from the specified resource.
        /// 
        /// Container for the necessary parameters to execute the UntagResource service method.
        /// 
        /// The response from the UntagResource service method, as returned by AppIntegrationsService.
        /// 
        /// Request processing failed due to an error or failure with the service.
        /// 
        /// 
        /// The request is not valid.
        /// 
        /// 
        /// The specified resource was not found.
        /// 
        /// 
        /// The throttling limit has been exceeded.
        /// 
        /// REST API Reference for UntagResource Operation
        public virtual UntagResourceResponse UntagResource(UntagResourceRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = UntagResourceRequestMarshaller.Instance;
            options.ResponseUnmarshaller = UntagResourceResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Initiates the asynchronous execution of the UntagResource operation.
        /// 
        /// 
        /// Container for the necessary parameters to execute the UntagResource operation on AmazonAppIntegrationsServiceClient.
        /// An AsyncCallback delegate that is invoked when the operation completes.
        /// A user-defined state object that is passed to the callback procedure. Retrieve this object from within the callback
        ///          procedure using the AsyncState property.
        /// 
        /// An IAsyncResult that can be used to poll or wait for results, or both; this value is also needed when invoking EndUntagResource
        ///         operation.
        /// REST API Reference for UntagResource Operation
        public virtual IAsyncResult BeginUntagResource(UntagResourceRequest request, AsyncCallback callback, object state)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = UntagResourceRequestMarshaller.Instance;
            options.ResponseUnmarshaller = UntagResourceResponseUnmarshaller.Instance;
            return BeginInvoke(request, options, callback, state);
        }
        /// 
        /// Finishes the asynchronous execution of the  UntagResource operation.
        /// 
        /// 
        /// The IAsyncResult returned by the call to BeginUntagResource.
        /// 
        /// Returns a  UntagResourceResult from AppIntegrationsService.
        /// REST API Reference for UntagResource Operation
        public virtual UntagResourceResponse EndUntagResource(IAsyncResult asyncResult)
        {
            return EndInvoke(asyncResult);
        }
        #endregion
        
        #region  UpdateDataIntegration
        /// 
        /// Updates the description of a DataIntegration.
        /// 
        ///   
        /// 
        /// You cannot create a DataIntegration association for a DataIntegration that has been
        /// previously associated. Use a different DataIntegration, or recreate the DataIntegration
        /// using the CreateDataIntegration
        /// API.
        /// 
        ///  
        /// 
        /// Container for the necessary parameters to execute the UpdateDataIntegration service method.
        /// 
        /// The response from the UpdateDataIntegration service method, as returned by AppIntegrationsService.
        /// 
        /// You do not have sufficient access to perform this action.
        /// 
        /// 
        /// Request processing failed due to an error or failure with the service.
        /// 
        /// 
        /// The request is not valid.
        /// 
        /// 
        /// The specified resource was not found.
        /// 
        /// 
        /// The throttling limit has been exceeded.
        /// 
        /// REST API Reference for UpdateDataIntegration Operation
        public virtual UpdateDataIntegrationResponse UpdateDataIntegration(UpdateDataIntegrationRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = UpdateDataIntegrationRequestMarshaller.Instance;
            options.ResponseUnmarshaller = UpdateDataIntegrationResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Initiates the asynchronous execution of the UpdateDataIntegration operation.
        /// 
        /// 
        /// Container for the necessary parameters to execute the UpdateDataIntegration operation on AmazonAppIntegrationsServiceClient.
        /// An AsyncCallback delegate that is invoked when the operation completes.
        /// A user-defined state object that is passed to the callback procedure. Retrieve this object from within the callback
        ///          procedure using the AsyncState property.
        /// 
        /// An IAsyncResult that can be used to poll or wait for results, or both; this value is also needed when invoking EndUpdateDataIntegration
        ///         operation.
        /// REST API Reference for UpdateDataIntegration Operation
        public virtual IAsyncResult BeginUpdateDataIntegration(UpdateDataIntegrationRequest request, AsyncCallback callback, object state)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = UpdateDataIntegrationRequestMarshaller.Instance;
            options.ResponseUnmarshaller = UpdateDataIntegrationResponseUnmarshaller.Instance;
            return BeginInvoke(request, options, callback, state);
        }
        /// 
        /// Finishes the asynchronous execution of the  UpdateDataIntegration operation.
        /// 
        /// 
        /// The IAsyncResult returned by the call to BeginUpdateDataIntegration.
        /// 
        /// Returns a  UpdateDataIntegrationResult from AppIntegrationsService.
        /// REST API Reference for UpdateDataIntegration Operation
        public virtual UpdateDataIntegrationResponse EndUpdateDataIntegration(IAsyncResult asyncResult)
        {
            return EndInvoke(asyncResult);
        }
        #endregion
        
        #region  UpdateEventIntegration
        /// 
        /// Updates the description of an event integration.
        /// 
        /// Container for the necessary parameters to execute the UpdateEventIntegration service method.
        /// 
        /// The response from the UpdateEventIntegration service method, as returned by AppIntegrationsService.
        /// 
        /// You do not have sufficient access to perform this action.
        /// 
        /// 
        /// Request processing failed due to an error or failure with the service.
        /// 
        /// 
        /// The request is not valid.
        /// 
        /// 
        /// The specified resource was not found.
        /// 
        /// 
        /// The throttling limit has been exceeded.
        /// 
        /// REST API Reference for UpdateEventIntegration Operation
        public virtual UpdateEventIntegrationResponse UpdateEventIntegration(UpdateEventIntegrationRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = UpdateEventIntegrationRequestMarshaller.Instance;
            options.ResponseUnmarshaller = UpdateEventIntegrationResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Initiates the asynchronous execution of the UpdateEventIntegration operation.
        /// 
        /// 
        /// Container for the necessary parameters to execute the UpdateEventIntegration operation on AmazonAppIntegrationsServiceClient.
        /// An AsyncCallback delegate that is invoked when the operation completes.
        /// A user-defined state object that is passed to the callback procedure. Retrieve this object from within the callback
        ///          procedure using the AsyncState property.
        /// 
        /// An IAsyncResult that can be used to poll or wait for results, or both; this value is also needed when invoking EndUpdateEventIntegration
        ///         operation.
        /// REST API Reference for UpdateEventIntegration Operation
        public virtual IAsyncResult BeginUpdateEventIntegration(UpdateEventIntegrationRequest request, AsyncCallback callback, object state)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = UpdateEventIntegrationRequestMarshaller.Instance;
            options.ResponseUnmarshaller = UpdateEventIntegrationResponseUnmarshaller.Instance;
            return BeginInvoke(request, options, callback, state);
        }
        /// 
        /// Finishes the asynchronous execution of the  UpdateEventIntegration operation.
        /// 
        /// 
        /// The IAsyncResult returned by the call to BeginUpdateEventIntegration.
        /// 
        /// Returns a  UpdateEventIntegrationResult from AppIntegrationsService.
        /// REST API Reference for UpdateEventIntegration Operation
        public virtual UpdateEventIntegrationResponse EndUpdateEventIntegration(IAsyncResult asyncResult)
        {
            return EndInvoke(asyncResult);
        }
        #endregion
        
    }
}