/*
 * 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 backup-gateway-2021-01-01.normal.json service model.
 */
using System;
using System.Collections.Generic;
using System.Net;
using Amazon.BackupGateway.Model;
using Amazon.BackupGateway.Model.Internal.MarshallTransformations;
using Amazon.BackupGateway.Internal;
using Amazon.Runtime;
using Amazon.Runtime.Internal;
using Amazon.Runtime.Internal.Auth;
using Amazon.Runtime.Internal.Transform;
namespace Amazon.BackupGateway
{
    /// 
    /// Implementation for accessing BackupGateway
    ///
    /// Backup gateway 
    /// 
    /// Backup gateway connects Backup to your hypervisor, so you can create, store, and restore
    /// backups of your virtual machines (VMs) anywhere, whether on-premises or in the VMware
    /// Cloud (VMC) on Amazon Web Services.
    /// 
    ///  
    /// 
    /// Add on-premises resources by connecting to a hypervisor through a gateway. Backup
    /// will automatically discover the resources in your hypervisor.
    /// 
    ///  
    /// 
    /// Use Backup to assign virtual or on-premises resources to a backup plan, or run on-demand
    /// backups. Once you have backed up your resources, you can view them and restore them
    /// like any resource supported by Backup.
    /// 
    ///  
    /// 
    /// To download the Amazon Web Services software to get started, navigate to the Backup
    /// console, choose Gateways, then choose Create gateway.
    /// 
    /// 
    /// 
    /// 
    public partial class AmazonBackupGatewayClient : AmazonServiceClient, IAmazonBackupGateway
    {
        private static IServiceMetadata serviceMetadata = new AmazonBackupGatewayMetadata();
#if BCL45 || AWS_ASYNC_ENUMERABLES_API
        private IBackupGatewayPaginatorFactory _paginators;
        /// 
        /// Paginators for the service
        /// 
        public IBackupGatewayPaginatorFactory Paginators 
        {
            get 
            {
                if (this._paginators == null) 
                {
                    this._paginators = new BackupGatewayPaginatorFactory(this);
                }
                return this._paginators;
            }
        }
#endif
        #region Constructors
        /// 
        /// Constructs AmazonBackupGatewayClient 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 AmazonBackupGatewayClient()
            : base(FallbackCredentialsFactory.GetCredentials(), new AmazonBackupGatewayConfig()) { }
        /// 
        /// Constructs AmazonBackupGatewayClient 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 AmazonBackupGatewayClient(RegionEndpoint region)
            : base(FallbackCredentialsFactory.GetCredentials(), new AmazonBackupGatewayConfig{RegionEndpoint = region}) { }
        /// 
        /// Constructs AmazonBackupGatewayClient 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 AmazonBackupGatewayClient Configuration Object
        public AmazonBackupGatewayClient(AmazonBackupGatewayConfig config)
            : base(FallbackCredentialsFactory.GetCredentials(config), config){}
        /// 
        /// Constructs AmazonBackupGatewayClient with AWS Credentials
        /// 
        /// AWS Credentials
        public AmazonBackupGatewayClient(AWSCredentials credentials)
            : this(credentials, new AmazonBackupGatewayConfig())
        {
        }
        /// 
        /// Constructs AmazonBackupGatewayClient with AWS Credentials
        /// 
        /// AWS Credentials
        /// The region to connect.
        public AmazonBackupGatewayClient(AWSCredentials credentials, RegionEndpoint region)
            : this(credentials, new AmazonBackupGatewayConfig{RegionEndpoint = region})
        {
        }
        /// 
        /// Constructs AmazonBackupGatewayClient with AWS Credentials and an
        /// AmazonBackupGatewayClient Configuration object.
        /// 
        /// AWS Credentials
        /// The AmazonBackupGatewayClient Configuration Object
        public AmazonBackupGatewayClient(AWSCredentials credentials, AmazonBackupGatewayConfig clientConfig)
            : base(credentials, clientConfig)
        {
        }
        /// 
        /// Constructs AmazonBackupGatewayClient with AWS Access Key ID and AWS Secret Key
        /// 
        /// AWS Access Key ID
        /// AWS Secret Access Key
        public AmazonBackupGatewayClient(string awsAccessKeyId, string awsSecretAccessKey)
            : this(awsAccessKeyId, awsSecretAccessKey, new AmazonBackupGatewayConfig())
        {
        }
        /// 
        /// Constructs AmazonBackupGatewayClient with AWS Access Key ID and AWS Secret Key
        /// 
        /// AWS Access Key ID
        /// AWS Secret Access Key
        /// The region to connect.
        public AmazonBackupGatewayClient(string awsAccessKeyId, string awsSecretAccessKey, RegionEndpoint region)
            : this(awsAccessKeyId, awsSecretAccessKey, new AmazonBackupGatewayConfig() {RegionEndpoint=region})
        {
        }
        /// 
        /// Constructs AmazonBackupGatewayClient with AWS Access Key ID, AWS Secret Key and an
        /// AmazonBackupGatewayClient Configuration object. 
        /// 
        /// AWS Access Key ID
        /// AWS Secret Access Key
        /// The AmazonBackupGatewayClient Configuration Object
        public AmazonBackupGatewayClient(string awsAccessKeyId, string awsSecretAccessKey, AmazonBackupGatewayConfig clientConfig)
            : base(awsAccessKeyId, awsSecretAccessKey, clientConfig)
        {
        }
        /// 
        /// Constructs AmazonBackupGatewayClient with AWS Access Key ID and AWS Secret Key
        /// 
        /// AWS Access Key ID
        /// AWS Secret Access Key
        /// AWS Session Token
        public AmazonBackupGatewayClient(string awsAccessKeyId, string awsSecretAccessKey, string awsSessionToken)
            : this(awsAccessKeyId, awsSecretAccessKey, awsSessionToken, new AmazonBackupGatewayConfig())
        {
        }
        /// 
        /// Constructs AmazonBackupGatewayClient 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 AmazonBackupGatewayClient(string awsAccessKeyId, string awsSecretAccessKey, string awsSessionToken, RegionEndpoint region)
            : this(awsAccessKeyId, awsSecretAccessKey, awsSessionToken, new AmazonBackupGatewayConfig{RegionEndpoint = region})
        {
        }
        /// 
        /// Constructs AmazonBackupGatewayClient with AWS Access Key ID, AWS Secret Key and an
        /// AmazonBackupGatewayClient Configuration object. 
        /// 
        /// AWS Access Key ID
        /// AWS Secret Access Key
        /// AWS Session Token
        /// The AmazonBackupGatewayClient Configuration Object
        public AmazonBackupGatewayClient(string awsAccessKeyId, string awsSecretAccessKey, string awsSessionToken, AmazonBackupGatewayConfig 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 AmazonBackupGatewayEndpointResolver());
        }
        /// 
        /// 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  AssociateGatewayToServer
        /// 
        /// Associates a backup gateway with your server. After you complete the association process,
        /// you can back up and restore your VMs through the gateway.
        /// 
        /// Container for the necessary parameters to execute the AssociateGatewayToServer service method.
        /// 
        /// The response from the AssociateGatewayToServer service method, as returned by BackupGateway.
        /// 
        /// The operation cannot proceed because it is not supported.
        /// 
        /// 
        /// The operation did not succeed because an internal error occurred. Try again later.
        /// 
        /// 
        /// TPS has been limited to protect against intentional or unintentional high request
        /// volumes.
        /// 
        /// 
        /// The operation did not succeed because a validation error occurred.
        /// 
        /// REST API Reference for AssociateGatewayToServer Operation
        public virtual AssociateGatewayToServerResponse AssociateGatewayToServer(AssociateGatewayToServerRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AssociateGatewayToServerRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AssociateGatewayToServerResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Initiates the asynchronous execution of the AssociateGatewayToServer operation.
        /// 
        /// 
        /// Container for the necessary parameters to execute the AssociateGatewayToServer operation on AmazonBackupGatewayClient.
        /// 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 EndAssociateGatewayToServer
        ///         operation.
        /// REST API Reference for AssociateGatewayToServer Operation
        public virtual IAsyncResult BeginAssociateGatewayToServer(AssociateGatewayToServerRequest request, AsyncCallback callback, object state)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = AssociateGatewayToServerRequestMarshaller.Instance;
            options.ResponseUnmarshaller = AssociateGatewayToServerResponseUnmarshaller.Instance;
            return BeginInvoke(request, options, callback, state);
        }
        /// 
        /// Finishes the asynchronous execution of the  AssociateGatewayToServer operation.
        /// 
        /// 
        /// The IAsyncResult returned by the call to BeginAssociateGatewayToServer.
        /// 
        /// Returns a  AssociateGatewayToServerResult from BackupGateway.
        /// REST API Reference for AssociateGatewayToServer Operation
        public virtual AssociateGatewayToServerResponse EndAssociateGatewayToServer(IAsyncResult asyncResult)
        {
            return EndInvoke(asyncResult);
        }
        #endregion
        
        #region  CreateGateway
        /// 
        /// Creates a backup gateway. After you create a gateway, you can associate it with a
        /// server using the AssociateGatewayToServer operation.
        /// 
        /// Container for the necessary parameters to execute the CreateGateway service method.
        /// 
        /// The response from the CreateGateway service method, as returned by BackupGateway.
        /// 
        /// The operation did not succeed because an internal error occurred. Try again later.
        /// 
        /// 
        /// TPS has been limited to protect against intentional or unintentional high request
        /// volumes.
        /// 
        /// 
        /// The operation did not succeed because a validation error occurred.
        /// 
        /// REST API Reference for CreateGateway Operation
        public virtual CreateGatewayResponse CreateGateway(CreateGatewayRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateGatewayRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateGatewayResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Initiates the asynchronous execution of the CreateGateway operation.
        /// 
        /// 
        /// Container for the necessary parameters to execute the CreateGateway operation on AmazonBackupGatewayClient.
        /// 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 EndCreateGateway
        ///         operation.
        /// REST API Reference for CreateGateway Operation
        public virtual IAsyncResult BeginCreateGateway(CreateGatewayRequest request, AsyncCallback callback, object state)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateGatewayRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateGatewayResponseUnmarshaller.Instance;
            return BeginInvoke(request, options, callback, state);
        }
        /// 
        /// Finishes the asynchronous execution of the  CreateGateway operation.
        /// 
        /// 
        /// The IAsyncResult returned by the call to BeginCreateGateway.
        /// 
        /// Returns a  CreateGatewayResult from BackupGateway.
        /// REST API Reference for CreateGateway Operation
        public virtual CreateGatewayResponse EndCreateGateway(IAsyncResult asyncResult)
        {
            return EndInvoke(asyncResult);
        }
        #endregion
        
        #region  DeleteGateway
        /// 
        /// Deletes a backup gateway.
        /// 
        /// Container for the necessary parameters to execute the DeleteGateway service method.
        /// 
        /// The response from the DeleteGateway service method, as returned by BackupGateway.
        /// 
        /// The operation did not succeed because an internal error occurred. Try again later.
        /// 
        /// 
        /// A resource that is required for the action wasn't found.
        /// 
        /// 
        /// TPS has been limited to protect against intentional or unintentional high request
        /// volumes.
        /// 
        /// 
        /// The operation did not succeed because a validation error occurred.
        /// 
        /// REST API Reference for DeleteGateway Operation
        public virtual DeleteGatewayResponse DeleteGateway(DeleteGatewayRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = DeleteGatewayRequestMarshaller.Instance;
            options.ResponseUnmarshaller = DeleteGatewayResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Initiates the asynchronous execution of the DeleteGateway operation.
        /// 
        /// 
        /// Container for the necessary parameters to execute the DeleteGateway operation on AmazonBackupGatewayClient.
        /// 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 EndDeleteGateway
        ///         operation.
        /// REST API Reference for DeleteGateway Operation
        public virtual IAsyncResult BeginDeleteGateway(DeleteGatewayRequest request, AsyncCallback callback, object state)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = DeleteGatewayRequestMarshaller.Instance;
            options.ResponseUnmarshaller = DeleteGatewayResponseUnmarshaller.Instance;
            return BeginInvoke(request, options, callback, state);
        }
        /// 
        /// Finishes the asynchronous execution of the  DeleteGateway operation.
        /// 
        /// 
        /// The IAsyncResult returned by the call to BeginDeleteGateway.
        /// 
        /// Returns a  DeleteGatewayResult from BackupGateway.
        /// REST API Reference for DeleteGateway Operation
        public virtual DeleteGatewayResponse EndDeleteGateway(IAsyncResult asyncResult)
        {
            return EndInvoke(asyncResult);
        }
        #endregion
        
        #region  DeleteHypervisor
        /// 
        /// Deletes a hypervisor.
        /// 
        /// Container for the necessary parameters to execute the DeleteHypervisor service method.
        /// 
        /// The response from the DeleteHypervisor service method, as returned by BackupGateway.
        /// 
        /// The operation cannot proceed because you have insufficient permissions.
        /// 
        /// 
        /// The operation cannot proceed because it is not supported.
        /// 
        /// 
        /// The operation did not succeed because an internal error occurred. Try again later.
        /// 
        /// 
        /// A resource that is required for the action wasn't found.
        /// 
        /// 
        /// TPS has been limited to protect against intentional or unintentional high request
        /// volumes.
        /// 
        /// 
        /// The operation did not succeed because a validation error occurred.
        /// 
        /// REST API Reference for DeleteHypervisor Operation
        public virtual DeleteHypervisorResponse DeleteHypervisor(DeleteHypervisorRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = DeleteHypervisorRequestMarshaller.Instance;
            options.ResponseUnmarshaller = DeleteHypervisorResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Initiates the asynchronous execution of the DeleteHypervisor operation.
        /// 
        /// 
        /// Container for the necessary parameters to execute the DeleteHypervisor operation on AmazonBackupGatewayClient.
        /// 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 EndDeleteHypervisor
        ///         operation.
        /// REST API Reference for DeleteHypervisor Operation
        public virtual IAsyncResult BeginDeleteHypervisor(DeleteHypervisorRequest request, AsyncCallback callback, object state)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = DeleteHypervisorRequestMarshaller.Instance;
            options.ResponseUnmarshaller = DeleteHypervisorResponseUnmarshaller.Instance;
            return BeginInvoke(request, options, callback, state);
        }
        /// 
        /// Finishes the asynchronous execution of the  DeleteHypervisor operation.
        /// 
        /// 
        /// The IAsyncResult returned by the call to BeginDeleteHypervisor.
        /// 
        /// Returns a  DeleteHypervisorResult from BackupGateway.
        /// REST API Reference for DeleteHypervisor Operation
        public virtual DeleteHypervisorResponse EndDeleteHypervisor(IAsyncResult asyncResult)
        {
            return EndInvoke(asyncResult);
        }
        #endregion
        
        #region  DisassociateGatewayFromServer
        /// 
        /// Disassociates a backup gateway from the specified server. After the disassociation
        /// process finishes, the gateway can no longer access the virtual machines on the server.
        /// 
        /// Container for the necessary parameters to execute the DisassociateGatewayFromServer service method.
        /// 
        /// The response from the DisassociateGatewayFromServer service method, as returned by BackupGateway.
        /// 
        /// The operation cannot proceed because it is not supported.
        /// 
        /// 
        /// The operation did not succeed because an internal error occurred. Try again later.
        /// 
        /// 
        /// A resource that is required for the action wasn't found.
        /// 
        /// 
        /// TPS has been limited to protect against intentional or unintentional high request
        /// volumes.
        /// 
        /// 
        /// The operation did not succeed because a validation error occurred.
        /// 
        /// REST API Reference for DisassociateGatewayFromServer Operation
        public virtual DisassociateGatewayFromServerResponse DisassociateGatewayFromServer(DisassociateGatewayFromServerRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = DisassociateGatewayFromServerRequestMarshaller.Instance;
            options.ResponseUnmarshaller = DisassociateGatewayFromServerResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Initiates the asynchronous execution of the DisassociateGatewayFromServer operation.
        /// 
        /// 
        /// Container for the necessary parameters to execute the DisassociateGatewayFromServer operation on AmazonBackupGatewayClient.
        /// 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 EndDisassociateGatewayFromServer
        ///         operation.
        /// REST API Reference for DisassociateGatewayFromServer Operation
        public virtual IAsyncResult BeginDisassociateGatewayFromServer(DisassociateGatewayFromServerRequest request, AsyncCallback callback, object state)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = DisassociateGatewayFromServerRequestMarshaller.Instance;
            options.ResponseUnmarshaller = DisassociateGatewayFromServerResponseUnmarshaller.Instance;
            return BeginInvoke(request, options, callback, state);
        }
        /// 
        /// Finishes the asynchronous execution of the  DisassociateGatewayFromServer operation.
        /// 
        /// 
        /// The IAsyncResult returned by the call to BeginDisassociateGatewayFromServer.
        /// 
        /// Returns a  DisassociateGatewayFromServerResult from BackupGateway.
        /// REST API Reference for DisassociateGatewayFromServer Operation
        public virtual DisassociateGatewayFromServerResponse EndDisassociateGatewayFromServer(IAsyncResult asyncResult)
        {
            return EndInvoke(asyncResult);
        }
        #endregion
        
        #region  GetBandwidthRateLimitSchedule
        /// 
        /// Retrieves the bandwidth rate limit schedule for a specified gateway. By default, gateways
        /// do not have bandwidth rate limit schedules, which means no bandwidth rate limiting
        /// is in effect. Use this to get a gateway's bandwidth rate limit schedule.
        /// 
        /// Container for the necessary parameters to execute the GetBandwidthRateLimitSchedule service method.
        /// 
        /// The response from the GetBandwidthRateLimitSchedule service method, as returned by BackupGateway.
        /// 
        /// The operation did not succeed because an internal error occurred. Try again later.
        /// 
        /// 
        /// A resource that is required for the action wasn't found.
        /// 
        /// 
        /// TPS has been limited to protect against intentional or unintentional high request
        /// volumes.
        /// 
        /// 
        /// The operation did not succeed because a validation error occurred.
        /// 
        /// REST API Reference for GetBandwidthRateLimitSchedule Operation
        public virtual GetBandwidthRateLimitScheduleResponse GetBandwidthRateLimitSchedule(GetBandwidthRateLimitScheduleRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = GetBandwidthRateLimitScheduleRequestMarshaller.Instance;
            options.ResponseUnmarshaller = GetBandwidthRateLimitScheduleResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Initiates the asynchronous execution of the GetBandwidthRateLimitSchedule operation.
        /// 
        /// 
        /// Container for the necessary parameters to execute the GetBandwidthRateLimitSchedule operation on AmazonBackupGatewayClient.
        /// 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 EndGetBandwidthRateLimitSchedule
        ///         operation.
        /// REST API Reference for GetBandwidthRateLimitSchedule Operation
        public virtual IAsyncResult BeginGetBandwidthRateLimitSchedule(GetBandwidthRateLimitScheduleRequest request, AsyncCallback callback, object state)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = GetBandwidthRateLimitScheduleRequestMarshaller.Instance;
            options.ResponseUnmarshaller = GetBandwidthRateLimitScheduleResponseUnmarshaller.Instance;
            return BeginInvoke(request, options, callback, state);
        }
        /// 
        /// Finishes the asynchronous execution of the  GetBandwidthRateLimitSchedule operation.
        /// 
        /// 
        /// The IAsyncResult returned by the call to BeginGetBandwidthRateLimitSchedule.
        /// 
        /// Returns a  GetBandwidthRateLimitScheduleResult from BackupGateway.
        /// REST API Reference for GetBandwidthRateLimitSchedule Operation
        public virtual GetBandwidthRateLimitScheduleResponse EndGetBandwidthRateLimitSchedule(IAsyncResult asyncResult)
        {
            return EndInvoke(asyncResult);
        }
        #endregion
        
        #region  GetGateway
        /// 
        /// By providing the ARN (Amazon Resource Name), this API returns the gateway.
        /// 
        /// Container for the necessary parameters to execute the GetGateway service method.
        /// 
        /// The response from the GetGateway service method, as returned by BackupGateway.
        /// 
        /// The operation did not succeed because an internal error occurred. Try again later.
        /// 
        /// 
        /// A resource that is required for the action wasn't found.
        /// 
        /// 
        /// TPS has been limited to protect against intentional or unintentional high request
        /// volumes.
        /// 
        /// 
        /// The operation did not succeed because a validation error occurred.
        /// 
        /// REST API Reference for GetGateway Operation
        public virtual GetGatewayResponse GetGateway(GetGatewayRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = GetGatewayRequestMarshaller.Instance;
            options.ResponseUnmarshaller = GetGatewayResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Initiates the asynchronous execution of the GetGateway operation.
        /// 
        /// 
        /// Container for the necessary parameters to execute the GetGateway operation on AmazonBackupGatewayClient.
        /// 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 EndGetGateway
        ///         operation.
        /// REST API Reference for GetGateway Operation
        public virtual IAsyncResult BeginGetGateway(GetGatewayRequest request, AsyncCallback callback, object state)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = GetGatewayRequestMarshaller.Instance;
            options.ResponseUnmarshaller = GetGatewayResponseUnmarshaller.Instance;
            return BeginInvoke(request, options, callback, state);
        }
        /// 
        /// Finishes the asynchronous execution of the  GetGateway operation.
        /// 
        /// 
        /// The IAsyncResult returned by the call to BeginGetGateway.
        /// 
        /// Returns a  GetGatewayResult from BackupGateway.
        /// REST API Reference for GetGateway Operation
        public virtual GetGatewayResponse EndGetGateway(IAsyncResult asyncResult)
        {
            return EndInvoke(asyncResult);
        }
        #endregion
        
        #region  GetHypervisor
        /// 
        /// This action requests information about the specified hypervisor to which the gateway
        /// will connect. A hypervisor is hardware, software, or firmware that creates and manages
        /// virtual machines, and allocates resources to them.
        /// 
        /// Container for the necessary parameters to execute the GetHypervisor service method.
        /// 
        /// The response from the GetHypervisor service method, as returned by BackupGateway.
        /// 
        /// The operation did not succeed because an internal error occurred. Try again later.
        /// 
        /// 
        /// A resource that is required for the action wasn't found.
        /// 
        /// 
        /// TPS has been limited to protect against intentional or unintentional high request
        /// volumes.
        /// 
        /// 
        /// The operation did not succeed because a validation error occurred.
        /// 
        /// REST API Reference for GetHypervisor Operation
        public virtual GetHypervisorResponse GetHypervisor(GetHypervisorRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = GetHypervisorRequestMarshaller.Instance;
            options.ResponseUnmarshaller = GetHypervisorResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Initiates the asynchronous execution of the GetHypervisor operation.
        /// 
        /// 
        /// Container for the necessary parameters to execute the GetHypervisor operation on AmazonBackupGatewayClient.
        /// 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 EndGetHypervisor
        ///         operation.
        /// REST API Reference for GetHypervisor Operation
        public virtual IAsyncResult BeginGetHypervisor(GetHypervisorRequest request, AsyncCallback callback, object state)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = GetHypervisorRequestMarshaller.Instance;
            options.ResponseUnmarshaller = GetHypervisorResponseUnmarshaller.Instance;
            return BeginInvoke(request, options, callback, state);
        }
        /// 
        /// Finishes the asynchronous execution of the  GetHypervisor operation.
        /// 
        /// 
        /// The IAsyncResult returned by the call to BeginGetHypervisor.
        /// 
        /// Returns a  GetHypervisorResult from BackupGateway.
        /// REST API Reference for GetHypervisor Operation
        public virtual GetHypervisorResponse EndGetHypervisor(IAsyncResult asyncResult)
        {
            return EndInvoke(asyncResult);
        }
        #endregion
        
        #region  GetHypervisorPropertyMappings
        /// 
        /// This action retrieves the property mappings for the specified hypervisor. A hypervisor
        /// property mapping displays the relationship of entity properties available from the
        /// on-premises hypervisor to the properties available in Amazon Web Services.
        /// 
        /// Container for the necessary parameters to execute the GetHypervisorPropertyMappings service method.
        /// 
        /// The response from the GetHypervisorPropertyMappings service method, as returned by BackupGateway.
        /// 
        /// The operation did not succeed because an internal error occurred. Try again later.
        /// 
        /// 
        /// A resource that is required for the action wasn't found.
        /// 
        /// 
        /// TPS has been limited to protect against intentional or unintentional high request
        /// volumes.
        /// 
        /// 
        /// The operation did not succeed because a validation error occurred.
        /// 
        /// REST API Reference for GetHypervisorPropertyMappings Operation
        public virtual GetHypervisorPropertyMappingsResponse GetHypervisorPropertyMappings(GetHypervisorPropertyMappingsRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = GetHypervisorPropertyMappingsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = GetHypervisorPropertyMappingsResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Initiates the asynchronous execution of the GetHypervisorPropertyMappings operation.
        /// 
        /// 
        /// Container for the necessary parameters to execute the GetHypervisorPropertyMappings operation on AmazonBackupGatewayClient.
        /// 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 EndGetHypervisorPropertyMappings
        ///         operation.
        /// REST API Reference for GetHypervisorPropertyMappings Operation
        public virtual IAsyncResult BeginGetHypervisorPropertyMappings(GetHypervisorPropertyMappingsRequest request, AsyncCallback callback, object state)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = GetHypervisorPropertyMappingsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = GetHypervisorPropertyMappingsResponseUnmarshaller.Instance;
            return BeginInvoke(request, options, callback, state);
        }
        /// 
        /// Finishes the asynchronous execution of the  GetHypervisorPropertyMappings operation.
        /// 
        /// 
        /// The IAsyncResult returned by the call to BeginGetHypervisorPropertyMappings.
        /// 
        /// Returns a  GetHypervisorPropertyMappingsResult from BackupGateway.
        /// REST API Reference for GetHypervisorPropertyMappings Operation
        public virtual GetHypervisorPropertyMappingsResponse EndGetHypervisorPropertyMappings(IAsyncResult asyncResult)
        {
            return EndInvoke(asyncResult);
        }
        #endregion
        
        #region  GetVirtualMachine
        /// 
        /// By providing the ARN (Amazon Resource Name), this API returns the virtual machine.
        /// 
        /// Container for the necessary parameters to execute the GetVirtualMachine service method.
        /// 
        /// The response from the GetVirtualMachine service method, as returned by BackupGateway.
        /// 
        /// The operation did not succeed because an internal error occurred. Try again later.
        /// 
        /// 
        /// A resource that is required for the action wasn't found.
        /// 
        /// 
        /// TPS has been limited to protect against intentional or unintentional high request
        /// volumes.
        /// 
        /// 
        /// The operation did not succeed because a validation error occurred.
        /// 
        /// REST API Reference for GetVirtualMachine Operation
        public virtual GetVirtualMachineResponse GetVirtualMachine(GetVirtualMachineRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = GetVirtualMachineRequestMarshaller.Instance;
            options.ResponseUnmarshaller = GetVirtualMachineResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Initiates the asynchronous execution of the GetVirtualMachine operation.
        /// 
        /// 
        /// Container for the necessary parameters to execute the GetVirtualMachine operation on AmazonBackupGatewayClient.
        /// 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 EndGetVirtualMachine
        ///         operation.
        /// REST API Reference for GetVirtualMachine Operation
        public virtual IAsyncResult BeginGetVirtualMachine(GetVirtualMachineRequest request, AsyncCallback callback, object state)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = GetVirtualMachineRequestMarshaller.Instance;
            options.ResponseUnmarshaller = GetVirtualMachineResponseUnmarshaller.Instance;
            return BeginInvoke(request, options, callback, state);
        }
        /// 
        /// Finishes the asynchronous execution of the  GetVirtualMachine operation.
        /// 
        /// 
        /// The IAsyncResult returned by the call to BeginGetVirtualMachine.
        /// 
        /// Returns a  GetVirtualMachineResult from BackupGateway.
        /// REST API Reference for GetVirtualMachine Operation
        public virtual GetVirtualMachineResponse EndGetVirtualMachine(IAsyncResult asyncResult)
        {
            return EndInvoke(asyncResult);
        }
        #endregion
        
        #region  ImportHypervisorConfiguration
        /// 
        /// Connect to a hypervisor by importing its configuration.
        /// 
        /// Container for the necessary parameters to execute the ImportHypervisorConfiguration service method.
        /// 
        /// The response from the ImportHypervisorConfiguration service method, as returned by BackupGateway.
        /// 
        /// The operation cannot proceed because you have insufficient permissions.
        /// 
        /// 
        /// The operation cannot proceed because it is not supported.
        /// 
        /// 
        /// The operation did not succeed because an internal error occurred. Try again later.
        /// 
        /// 
        /// TPS has been limited to protect against intentional or unintentional high request
        /// volumes.
        /// 
        /// 
        /// The operation did not succeed because a validation error occurred.
        /// 
        /// REST API Reference for ImportHypervisorConfiguration Operation
        public virtual ImportHypervisorConfigurationResponse ImportHypervisorConfiguration(ImportHypervisorConfigurationRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ImportHypervisorConfigurationRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ImportHypervisorConfigurationResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Initiates the asynchronous execution of the ImportHypervisorConfiguration operation.
        /// 
        /// 
        /// Container for the necessary parameters to execute the ImportHypervisorConfiguration operation on AmazonBackupGatewayClient.
        /// 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 EndImportHypervisorConfiguration
        ///         operation.
        /// REST API Reference for ImportHypervisorConfiguration Operation
        public virtual IAsyncResult BeginImportHypervisorConfiguration(ImportHypervisorConfigurationRequest request, AsyncCallback callback, object state)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ImportHypervisorConfigurationRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ImportHypervisorConfigurationResponseUnmarshaller.Instance;
            return BeginInvoke(request, options, callback, state);
        }
        /// 
        /// Finishes the asynchronous execution of the  ImportHypervisorConfiguration operation.
        /// 
        /// 
        /// The IAsyncResult returned by the call to BeginImportHypervisorConfiguration.
        /// 
        /// Returns a  ImportHypervisorConfigurationResult from BackupGateway.
        /// REST API Reference for ImportHypervisorConfiguration Operation
        public virtual ImportHypervisorConfigurationResponse EndImportHypervisorConfiguration(IAsyncResult asyncResult)
        {
            return EndInvoke(asyncResult);
        }
        #endregion
        
        #region  ListGateways
        /// 
        /// Lists backup gateways owned by an Amazon Web Services account in an Amazon Web Services
        /// Region. The returned list is ordered by gateway Amazon Resource Name (ARN).
        /// 
        /// Container for the necessary parameters to execute the ListGateways service method.
        /// 
        /// The response from the ListGateways service method, as returned by BackupGateway.
        /// 
        /// The operation did not succeed because an internal error occurred. Try again later.
        /// 
        /// 
        /// TPS has been limited to protect against intentional or unintentional high request
        /// volumes.
        /// 
        /// 
        /// The operation did not succeed because a validation error occurred.
        /// 
        /// REST API Reference for ListGateways Operation
        public virtual ListGatewaysResponse ListGateways(ListGatewaysRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ListGatewaysRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ListGatewaysResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Initiates the asynchronous execution of the ListGateways operation.
        /// 
        /// 
        /// Container for the necessary parameters to execute the ListGateways operation on AmazonBackupGatewayClient.
        /// 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 EndListGateways
        ///         operation.
        /// REST API Reference for ListGateways Operation
        public virtual IAsyncResult BeginListGateways(ListGatewaysRequest request, AsyncCallback callback, object state)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ListGatewaysRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ListGatewaysResponseUnmarshaller.Instance;
            return BeginInvoke(request, options, callback, state);
        }
        /// 
        /// Finishes the asynchronous execution of the  ListGateways operation.
        /// 
        /// 
        /// The IAsyncResult returned by the call to BeginListGateways.
        /// 
        /// Returns a  ListGatewaysResult from BackupGateway.
        /// REST API Reference for ListGateways Operation
        public virtual ListGatewaysResponse EndListGateways(IAsyncResult asyncResult)
        {
            return EndInvoke(asyncResult);
        }
        #endregion
        
        #region  ListHypervisors
        /// 
        /// Lists your hypervisors.
        /// 
        /// Container for the necessary parameters to execute the ListHypervisors service method.
        /// 
        /// The response from the ListHypervisors service method, as returned by BackupGateway.
        /// 
        /// The operation did not succeed because an internal error occurred. Try again later.
        /// 
        /// 
        /// TPS has been limited to protect against intentional or unintentional high request
        /// volumes.
        /// 
        /// 
        /// The operation did not succeed because a validation error occurred.
        /// 
        /// REST API Reference for ListHypervisors Operation
        public virtual ListHypervisorsResponse ListHypervisors(ListHypervisorsRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ListHypervisorsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ListHypervisorsResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Initiates the asynchronous execution of the ListHypervisors operation.
        /// 
        /// 
        /// Container for the necessary parameters to execute the ListHypervisors operation on AmazonBackupGatewayClient.
        /// 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 EndListHypervisors
        ///         operation.
        /// REST API Reference for ListHypervisors Operation
        public virtual IAsyncResult BeginListHypervisors(ListHypervisorsRequest request, AsyncCallback callback, object state)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ListHypervisorsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ListHypervisorsResponseUnmarshaller.Instance;
            return BeginInvoke(request, options, callback, state);
        }
        /// 
        /// Finishes the asynchronous execution of the  ListHypervisors operation.
        /// 
        /// 
        /// The IAsyncResult returned by the call to BeginListHypervisors.
        /// 
        /// Returns a  ListHypervisorsResult from BackupGateway.
        /// REST API Reference for ListHypervisors Operation
        public virtual ListHypervisorsResponse EndListHypervisors(IAsyncResult asyncResult)
        {
            return EndInvoke(asyncResult);
        }
        #endregion
        
        #region  ListTagsForResource
        /// 
        /// Lists the tags applied to the resource identified by its Amazon Resource Name (ARN).
        /// 
        /// Container for the necessary parameters to execute the ListTagsForResource service method.
        /// 
        /// The response from the ListTagsForResource service method, as returned by BackupGateway.
        /// 
        /// The operation did not succeed because an internal error occurred. Try again later.
        /// 
        /// 
        /// A resource that is required for the action wasn't found.
        /// 
        /// 
        /// TPS has been limited to protect against intentional or unintentional high request
        /// volumes.
        /// 
        /// 
        /// The operation did not succeed because a validation error occurred.
        /// 
        /// 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 AmazonBackupGatewayClient.
        /// 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 BackupGateway.
        /// REST API Reference for ListTagsForResource Operation
        public virtual ListTagsForResourceResponse EndListTagsForResource(IAsyncResult asyncResult)
        {
            return EndInvoke(asyncResult);
        }
        #endregion
        
        #region  ListVirtualMachines
        /// 
        /// Lists your virtual machines.
        /// 
        /// Container for the necessary parameters to execute the ListVirtualMachines service method.
        /// 
        /// The response from the ListVirtualMachines service method, as returned by BackupGateway.
        /// 
        /// The operation did not succeed because an internal error occurred. Try again later.
        /// 
        /// 
        /// TPS has been limited to protect against intentional or unintentional high request
        /// volumes.
        /// 
        /// 
        /// The operation did not succeed because a validation error occurred.
        /// 
        /// REST API Reference for ListVirtualMachines Operation
        public virtual ListVirtualMachinesResponse ListVirtualMachines(ListVirtualMachinesRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ListVirtualMachinesRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ListVirtualMachinesResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Initiates the asynchronous execution of the ListVirtualMachines operation.
        /// 
        /// 
        /// Container for the necessary parameters to execute the ListVirtualMachines operation on AmazonBackupGatewayClient.
        /// 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 EndListVirtualMachines
        ///         operation.
        /// REST API Reference for ListVirtualMachines Operation
        public virtual IAsyncResult BeginListVirtualMachines(ListVirtualMachinesRequest request, AsyncCallback callback, object state)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ListVirtualMachinesRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ListVirtualMachinesResponseUnmarshaller.Instance;
            return BeginInvoke(request, options, callback, state);
        }
        /// 
        /// Finishes the asynchronous execution of the  ListVirtualMachines operation.
        /// 
        /// 
        /// The IAsyncResult returned by the call to BeginListVirtualMachines.
        /// 
        /// Returns a  ListVirtualMachinesResult from BackupGateway.
        /// REST API Reference for ListVirtualMachines Operation
        public virtual ListVirtualMachinesResponse EndListVirtualMachines(IAsyncResult asyncResult)
        {
            return EndInvoke(asyncResult);
        }
        #endregion
        
        #region  PutBandwidthRateLimitSchedule
        /// 
        /// This action sets the bandwidth rate limit schedule for a specified gateway. By default,
        /// gateways do not have a bandwidth rate limit schedule, which means no bandwidth rate
        /// limiting is in effect. Use this to initiate a gateway's bandwidth rate limit schedule.
        /// 
        /// Container for the necessary parameters to execute the PutBandwidthRateLimitSchedule service method.
        /// 
        /// The response from the PutBandwidthRateLimitSchedule service method, as returned by BackupGateway.
        /// 
        /// The operation did not succeed because an internal error occurred. Try again later.
        /// 
        /// 
        /// A resource that is required for the action wasn't found.
        /// 
        /// 
        /// TPS has been limited to protect against intentional or unintentional high request
        /// volumes.
        /// 
        /// 
        /// The operation did not succeed because a validation error occurred.
        /// 
        /// REST API Reference for PutBandwidthRateLimitSchedule Operation
        public virtual PutBandwidthRateLimitScheduleResponse PutBandwidthRateLimitSchedule(PutBandwidthRateLimitScheduleRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = PutBandwidthRateLimitScheduleRequestMarshaller.Instance;
            options.ResponseUnmarshaller = PutBandwidthRateLimitScheduleResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Initiates the asynchronous execution of the PutBandwidthRateLimitSchedule operation.
        /// 
        /// 
        /// Container for the necessary parameters to execute the PutBandwidthRateLimitSchedule operation on AmazonBackupGatewayClient.
        /// 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 EndPutBandwidthRateLimitSchedule
        ///         operation.
        /// REST API Reference for PutBandwidthRateLimitSchedule Operation
        public virtual IAsyncResult BeginPutBandwidthRateLimitSchedule(PutBandwidthRateLimitScheduleRequest request, AsyncCallback callback, object state)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = PutBandwidthRateLimitScheduleRequestMarshaller.Instance;
            options.ResponseUnmarshaller = PutBandwidthRateLimitScheduleResponseUnmarshaller.Instance;
            return BeginInvoke(request, options, callback, state);
        }
        /// 
        /// Finishes the asynchronous execution of the  PutBandwidthRateLimitSchedule operation.
        /// 
        /// 
        /// The IAsyncResult returned by the call to BeginPutBandwidthRateLimitSchedule.
        /// 
        /// Returns a  PutBandwidthRateLimitScheduleResult from BackupGateway.
        /// REST API Reference for PutBandwidthRateLimitSchedule Operation
        public virtual PutBandwidthRateLimitScheduleResponse EndPutBandwidthRateLimitSchedule(IAsyncResult asyncResult)
        {
            return EndInvoke(asyncResult);
        }
        #endregion
        
        #region  PutHypervisorPropertyMappings
        /// 
        /// This action sets the property mappings for the specified hypervisor. A hypervisor
        /// property mapping displays the relationship of entity properties available from the
        /// on-premises hypervisor to the properties available in Amazon Web Services.
        /// 
        /// Container for the necessary parameters to execute the PutHypervisorPropertyMappings service method.
        /// 
        /// The response from the PutHypervisorPropertyMappings service method, as returned by BackupGateway.
        /// 
        /// The operation cannot proceed because you have insufficient permissions.
        /// 
        /// 
        /// The operation cannot proceed because it is not supported.
        /// 
        /// 
        /// The operation did not succeed because an internal error occurred. Try again later.
        /// 
        /// 
        /// A resource that is required for the action wasn't found.
        /// 
        /// 
        /// TPS has been limited to protect against intentional or unintentional high request
        /// volumes.
        /// 
        /// 
        /// The operation did not succeed because a validation error occurred.
        /// 
        /// REST API Reference for PutHypervisorPropertyMappings Operation
        public virtual PutHypervisorPropertyMappingsResponse PutHypervisorPropertyMappings(PutHypervisorPropertyMappingsRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = PutHypervisorPropertyMappingsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = PutHypervisorPropertyMappingsResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Initiates the asynchronous execution of the PutHypervisorPropertyMappings operation.
        /// 
        /// 
        /// Container for the necessary parameters to execute the PutHypervisorPropertyMappings operation on AmazonBackupGatewayClient.
        /// 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 EndPutHypervisorPropertyMappings
        ///         operation.
        /// REST API Reference for PutHypervisorPropertyMappings Operation
        public virtual IAsyncResult BeginPutHypervisorPropertyMappings(PutHypervisorPropertyMappingsRequest request, AsyncCallback callback, object state)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = PutHypervisorPropertyMappingsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = PutHypervisorPropertyMappingsResponseUnmarshaller.Instance;
            return BeginInvoke(request, options, callback, state);
        }
        /// 
        /// Finishes the asynchronous execution of the  PutHypervisorPropertyMappings operation.
        /// 
        /// 
        /// The IAsyncResult returned by the call to BeginPutHypervisorPropertyMappings.
        /// 
        /// Returns a  PutHypervisorPropertyMappingsResult from BackupGateway.
        /// REST API Reference for PutHypervisorPropertyMappings Operation
        public virtual PutHypervisorPropertyMappingsResponse EndPutHypervisorPropertyMappings(IAsyncResult asyncResult)
        {
            return EndInvoke(asyncResult);
        }
        #endregion
        
        #region  PutMaintenanceStartTime
        /// 
        /// Set the maintenance start time for a gateway.
        /// 
        /// Container for the necessary parameters to execute the PutMaintenanceStartTime service method.
        /// 
        /// The response from the PutMaintenanceStartTime service method, as returned by BackupGateway.
        /// 
        /// The operation cannot proceed because it is not supported.
        /// 
        /// 
        /// The operation did not succeed because an internal error occurred. Try again later.
        /// 
        /// 
        /// A resource that is required for the action wasn't found.
        /// 
        /// 
        /// TPS has been limited to protect against intentional or unintentional high request
        /// volumes.
        /// 
        /// 
        /// The operation did not succeed because a validation error occurred.
        /// 
        /// REST API Reference for PutMaintenanceStartTime Operation
        public virtual PutMaintenanceStartTimeResponse PutMaintenanceStartTime(PutMaintenanceStartTimeRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = PutMaintenanceStartTimeRequestMarshaller.Instance;
            options.ResponseUnmarshaller = PutMaintenanceStartTimeResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Initiates the asynchronous execution of the PutMaintenanceStartTime operation.
        /// 
        /// 
        /// Container for the necessary parameters to execute the PutMaintenanceStartTime operation on AmazonBackupGatewayClient.
        /// 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 EndPutMaintenanceStartTime
        ///         operation.
        /// REST API Reference for PutMaintenanceStartTime Operation
        public virtual IAsyncResult BeginPutMaintenanceStartTime(PutMaintenanceStartTimeRequest request, AsyncCallback callback, object state)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = PutMaintenanceStartTimeRequestMarshaller.Instance;
            options.ResponseUnmarshaller = PutMaintenanceStartTimeResponseUnmarshaller.Instance;
            return BeginInvoke(request, options, callback, state);
        }
        /// 
        /// Finishes the asynchronous execution of the  PutMaintenanceStartTime operation.
        /// 
        /// 
        /// The IAsyncResult returned by the call to BeginPutMaintenanceStartTime.
        /// 
        /// Returns a  PutMaintenanceStartTimeResult from BackupGateway.
        /// REST API Reference for PutMaintenanceStartTime Operation
        public virtual PutMaintenanceStartTimeResponse EndPutMaintenanceStartTime(IAsyncResult asyncResult)
        {
            return EndInvoke(asyncResult);
        }
        #endregion
        
        #region  StartVirtualMachinesMetadataSync
        /// 
        /// This action sends a request to sync metadata across the specified virtual machines.
        /// 
        /// Container for the necessary parameters to execute the StartVirtualMachinesMetadataSync service method.
        /// 
        /// The response from the StartVirtualMachinesMetadataSync service method, as returned by BackupGateway.
        /// 
        /// The operation cannot proceed because you have insufficient permissions.
        /// 
        /// 
        /// The operation did not succeed because an internal error occurred. Try again later.
        /// 
        /// 
        /// A resource that is required for the action wasn't found.
        /// 
        /// 
        /// TPS has been limited to protect against intentional or unintentional high request
        /// volumes.
        /// 
        /// 
        /// The operation did not succeed because a validation error occurred.
        /// 
        /// REST API Reference for StartVirtualMachinesMetadataSync Operation
        public virtual StartVirtualMachinesMetadataSyncResponse StartVirtualMachinesMetadataSync(StartVirtualMachinesMetadataSyncRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = StartVirtualMachinesMetadataSyncRequestMarshaller.Instance;
            options.ResponseUnmarshaller = StartVirtualMachinesMetadataSyncResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Initiates the asynchronous execution of the StartVirtualMachinesMetadataSync operation.
        /// 
        /// 
        /// Container for the necessary parameters to execute the StartVirtualMachinesMetadataSync operation on AmazonBackupGatewayClient.
        /// 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 EndStartVirtualMachinesMetadataSync
        ///         operation.
        /// REST API Reference for StartVirtualMachinesMetadataSync Operation
        public virtual IAsyncResult BeginStartVirtualMachinesMetadataSync(StartVirtualMachinesMetadataSyncRequest request, AsyncCallback callback, object state)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = StartVirtualMachinesMetadataSyncRequestMarshaller.Instance;
            options.ResponseUnmarshaller = StartVirtualMachinesMetadataSyncResponseUnmarshaller.Instance;
            return BeginInvoke(request, options, callback, state);
        }
        /// 
        /// Finishes the asynchronous execution of the  StartVirtualMachinesMetadataSync operation.
        /// 
        /// 
        /// The IAsyncResult returned by the call to BeginStartVirtualMachinesMetadataSync.
        /// 
        /// Returns a  StartVirtualMachinesMetadataSyncResult from BackupGateway.
        /// REST API Reference for StartVirtualMachinesMetadataSync Operation
        public virtual StartVirtualMachinesMetadataSyncResponse EndStartVirtualMachinesMetadataSync(IAsyncResult asyncResult)
        {
            return EndInvoke(asyncResult);
        }
        #endregion
        
        #region  TagResource
        /// 
        /// Tag the resource.
        /// 
        /// Container for the necessary parameters to execute the TagResource service method.
        /// 
        /// The response from the TagResource service method, as returned by BackupGateway.
        /// 
        /// The operation did not succeed because an internal error occurred. Try again later.
        /// 
        /// 
        /// A resource that is required for the action wasn't found.
        /// 
        /// 
        /// TPS has been limited to protect against intentional or unintentional high request
        /// volumes.
        /// 
        /// 
        /// The operation did not succeed because a validation error occurred.
        /// 
        /// 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 AmazonBackupGatewayClient.
        /// 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 BackupGateway.
        /// REST API Reference for TagResource Operation
        public virtual TagResourceResponse EndTagResource(IAsyncResult asyncResult)
        {
            return EndInvoke(asyncResult);
        }
        #endregion
        
        #region  TestHypervisorConfiguration
        /// 
        /// Tests your hypervisor configuration to validate that backup gateway can connect with
        /// the hypervisor and its resources.
        /// 
        /// Container for the necessary parameters to execute the TestHypervisorConfiguration service method.
        /// 
        /// The response from the TestHypervisorConfiguration service method, as returned by BackupGateway.
        /// 
        /// The operation cannot proceed because it is not supported.
        /// 
        /// 
        /// The operation did not succeed because an internal error occurred. Try again later.
        /// 
        /// 
        /// A resource that is required for the action wasn't found.
        /// 
        /// 
        /// TPS has been limited to protect against intentional or unintentional high request
        /// volumes.
        /// 
        /// 
        /// The operation did not succeed because a validation error occurred.
        /// 
        /// REST API Reference for TestHypervisorConfiguration Operation
        public virtual TestHypervisorConfigurationResponse TestHypervisorConfiguration(TestHypervisorConfigurationRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = TestHypervisorConfigurationRequestMarshaller.Instance;
            options.ResponseUnmarshaller = TestHypervisorConfigurationResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Initiates the asynchronous execution of the TestHypervisorConfiguration operation.
        /// 
        /// 
        /// Container for the necessary parameters to execute the TestHypervisorConfiguration operation on AmazonBackupGatewayClient.
        /// 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 EndTestHypervisorConfiguration
        ///         operation.
        /// REST API Reference for TestHypervisorConfiguration Operation
        public virtual IAsyncResult BeginTestHypervisorConfiguration(TestHypervisorConfigurationRequest request, AsyncCallback callback, object state)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = TestHypervisorConfigurationRequestMarshaller.Instance;
            options.ResponseUnmarshaller = TestHypervisorConfigurationResponseUnmarshaller.Instance;
            return BeginInvoke(request, options, callback, state);
        }
        /// 
        /// Finishes the asynchronous execution of the  TestHypervisorConfiguration operation.
        /// 
        /// 
        /// The IAsyncResult returned by the call to BeginTestHypervisorConfiguration.
        /// 
        /// Returns a  TestHypervisorConfigurationResult from BackupGateway.
        /// REST API Reference for TestHypervisorConfiguration Operation
        public virtual TestHypervisorConfigurationResponse EndTestHypervisorConfiguration(IAsyncResult asyncResult)
        {
            return EndInvoke(asyncResult);
        }
        #endregion
        
        #region  UntagResource
        /// 
        /// Removes tags from the resource.
        /// 
        /// Container for the necessary parameters to execute the UntagResource service method.
        /// 
        /// The response from the UntagResource service method, as returned by BackupGateway.
        /// 
        /// The operation did not succeed because an internal error occurred. Try again later.
        /// 
        /// 
        /// A resource that is required for the action wasn't found.
        /// 
        /// 
        /// TPS has been limited to protect against intentional or unintentional high request
        /// volumes.
        /// 
        /// 
        /// The operation did not succeed because a validation error occurred.
        /// 
        /// 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 AmazonBackupGatewayClient.
        /// 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 BackupGateway.
        /// REST API Reference for UntagResource Operation
        public virtual UntagResourceResponse EndUntagResource(IAsyncResult asyncResult)
        {
            return EndInvoke(asyncResult);
        }
        #endregion
        
        #region  UpdateGatewayInformation
        /// 
        /// Updates a gateway's name. Specify which gateway to update using the Amazon Resource
        /// Name (ARN) of the gateway in your request.
        /// 
        /// Container for the necessary parameters to execute the UpdateGatewayInformation service method.
        /// 
        /// The response from the UpdateGatewayInformation service method, as returned by BackupGateway.
        /// 
        /// The operation cannot proceed because it is not supported.
        /// 
        /// 
        /// The operation did not succeed because an internal error occurred. Try again later.
        /// 
        /// 
        /// A resource that is required for the action wasn't found.
        /// 
        /// 
        /// TPS has been limited to protect against intentional or unintentional high request
        /// volumes.
        /// 
        /// 
        /// The operation did not succeed because a validation error occurred.
        /// 
        /// REST API Reference for UpdateGatewayInformation Operation
        public virtual UpdateGatewayInformationResponse UpdateGatewayInformation(UpdateGatewayInformationRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = UpdateGatewayInformationRequestMarshaller.Instance;
            options.ResponseUnmarshaller = UpdateGatewayInformationResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Initiates the asynchronous execution of the UpdateGatewayInformation operation.
        /// 
        /// 
        /// Container for the necessary parameters to execute the UpdateGatewayInformation operation on AmazonBackupGatewayClient.
        /// 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 EndUpdateGatewayInformation
        ///         operation.
        /// REST API Reference for UpdateGatewayInformation Operation
        public virtual IAsyncResult BeginUpdateGatewayInformation(UpdateGatewayInformationRequest request, AsyncCallback callback, object state)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = UpdateGatewayInformationRequestMarshaller.Instance;
            options.ResponseUnmarshaller = UpdateGatewayInformationResponseUnmarshaller.Instance;
            return BeginInvoke(request, options, callback, state);
        }
        /// 
        /// Finishes the asynchronous execution of the  UpdateGatewayInformation operation.
        /// 
        /// 
        /// The IAsyncResult returned by the call to BeginUpdateGatewayInformation.
        /// 
        /// Returns a  UpdateGatewayInformationResult from BackupGateway.
        /// REST API Reference for UpdateGatewayInformation Operation
        public virtual UpdateGatewayInformationResponse EndUpdateGatewayInformation(IAsyncResult asyncResult)
        {
            return EndInvoke(asyncResult);
        }
        #endregion
        
        #region  UpdateGatewaySoftwareNow
        /// 
        /// Updates the gateway virtual machine (VM) software. The request immediately triggers
        /// the software update.
        /// 
        ///   
        /// 
        /// When you make this request, you get a 200 OK success response immediately.
        /// However, it might take some time for the update to complete.
        /// 
        ///  
        /// 
        /// Container for the necessary parameters to execute the UpdateGatewaySoftwareNow service method.
        /// 
        /// The response from the UpdateGatewaySoftwareNow service method, as returned by BackupGateway.
        /// 
        /// The operation did not succeed because an internal error occurred. Try again later.
        /// 
        /// 
        /// A resource that is required for the action wasn't found.
        /// 
        /// 
        /// TPS has been limited to protect against intentional or unintentional high request
        /// volumes.
        /// 
        /// 
        /// The operation did not succeed because a validation error occurred.
        /// 
        /// REST API Reference for UpdateGatewaySoftwareNow Operation
        public virtual UpdateGatewaySoftwareNowResponse UpdateGatewaySoftwareNow(UpdateGatewaySoftwareNowRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = UpdateGatewaySoftwareNowRequestMarshaller.Instance;
            options.ResponseUnmarshaller = UpdateGatewaySoftwareNowResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Initiates the asynchronous execution of the UpdateGatewaySoftwareNow operation.
        /// 
        /// 
        /// Container for the necessary parameters to execute the UpdateGatewaySoftwareNow operation on AmazonBackupGatewayClient.
        /// 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 EndUpdateGatewaySoftwareNow
        ///         operation.
        /// REST API Reference for UpdateGatewaySoftwareNow Operation
        public virtual IAsyncResult BeginUpdateGatewaySoftwareNow(UpdateGatewaySoftwareNowRequest request, AsyncCallback callback, object state)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = UpdateGatewaySoftwareNowRequestMarshaller.Instance;
            options.ResponseUnmarshaller = UpdateGatewaySoftwareNowResponseUnmarshaller.Instance;
            return BeginInvoke(request, options, callback, state);
        }
        /// 
        /// Finishes the asynchronous execution of the  UpdateGatewaySoftwareNow operation.
        /// 
        /// 
        /// The IAsyncResult returned by the call to BeginUpdateGatewaySoftwareNow.
        /// 
        /// Returns a  UpdateGatewaySoftwareNowResult from BackupGateway.
        /// REST API Reference for UpdateGatewaySoftwareNow Operation
        public virtual UpdateGatewaySoftwareNowResponse EndUpdateGatewaySoftwareNow(IAsyncResult asyncResult)
        {
            return EndInvoke(asyncResult);
        }
        #endregion
        
        #region  UpdateHypervisor
        /// 
        /// Updates a hypervisor metadata, including its host, username, and password. Specify
        /// which hypervisor to update using the Amazon Resource Name (ARN) of the hypervisor
        /// in your request.
        /// 
        /// Container for the necessary parameters to execute the UpdateHypervisor service method.
        /// 
        /// The response from the UpdateHypervisor service method, as returned by BackupGateway.
        /// 
        /// The operation cannot proceed because you have insufficient permissions.
        /// 
        /// 
        /// The operation cannot proceed because it is not supported.
        /// 
        /// 
        /// The operation did not succeed because an internal error occurred. Try again later.
        /// 
        /// 
        /// A resource that is required for the action wasn't found.
        /// 
        /// 
        /// TPS has been limited to protect against intentional or unintentional high request
        /// volumes.
        /// 
        /// 
        /// The operation did not succeed because a validation error occurred.
        /// 
        /// REST API Reference for UpdateHypervisor Operation
        public virtual UpdateHypervisorResponse UpdateHypervisor(UpdateHypervisorRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = UpdateHypervisorRequestMarshaller.Instance;
            options.ResponseUnmarshaller = UpdateHypervisorResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Initiates the asynchronous execution of the UpdateHypervisor operation.
        /// 
        /// 
        /// Container for the necessary parameters to execute the UpdateHypervisor operation on AmazonBackupGatewayClient.
        /// 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 EndUpdateHypervisor
        ///         operation.
        /// REST API Reference for UpdateHypervisor Operation
        public virtual IAsyncResult BeginUpdateHypervisor(UpdateHypervisorRequest request, AsyncCallback callback, object state)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = UpdateHypervisorRequestMarshaller.Instance;
            options.ResponseUnmarshaller = UpdateHypervisorResponseUnmarshaller.Instance;
            return BeginInvoke(request, options, callback, state);
        }
        /// 
        /// Finishes the asynchronous execution of the  UpdateHypervisor operation.
        /// 
        /// 
        /// The IAsyncResult returned by the call to BeginUpdateHypervisor.
        /// 
        /// Returns a  UpdateHypervisorResult from BackupGateway.
        /// REST API Reference for UpdateHypervisor Operation
        public virtual UpdateHypervisorResponse EndUpdateHypervisor(IAsyncResult asyncResult)
        {
            return EndInvoke(asyncResult);
        }
        #endregion
        
    }
}