/*
 * 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 emr-serverless-2021-07-13.normal.json service model.
 */
using System;
using System.Runtime.ExceptionServices;
using System.Threading;
using System.Threading.Tasks;
using System.Collections.Generic;
using System.Net;
using Amazon.EMRServerless.Model;
using Amazon.EMRServerless.Model.Internal.MarshallTransformations;
using Amazon.EMRServerless.Internal;
using Amazon.Runtime;
using Amazon.Runtime.Internal;
using Amazon.Runtime.Internal.Auth;
using Amazon.Runtime.Internal.Transform;
namespace Amazon.EMRServerless
{
    /// 
    /// Implementation for accessing EMRServerless
    ///
    /// Amazon EMR Serverless is a new deployment option for Amazon EMR. Amazon EMR Serverless
    /// provides a serverless runtime environment that simplifies running analytics applications
    /// using the latest open source frameworks such as Apache Spark and Apache Hive. With
    /// Amazon EMR Serverless, you don’t have to configure, optimize, secure, or operate clusters
    /// to run applications with these frameworks.
    /// 
    ///  
    /// 
    /// The API reference to Amazon EMR Serverless is emr-serverless. The emr-serverless
    /// prefix is used in the following scenarios: 
    /// 
    ///   -  
    /// 
    /// It is the prefix in the CLI commands for Amazon EMR Serverless. For example, aws
    /// emr-serverless start-job-run.
    /// 
    ///
-  
    /// 
    /// It is the prefix before IAM policy actions for Amazon EMR Serverless. For example,
    /// "Action": ["emr-serverless:StartJobRun"]. For more information, see Policy
    /// actions for Amazon EMR Serverless.
    /// 
    ///
-  
    /// 
    /// It is the prefix used in Amazon EMR Serverless service endpoints. For example, emr-serverless.us-east-2.amazonaws.com.
    /// 
    ///
/// 
    public partial class AmazonEMRServerlessClient : AmazonServiceClient, IAmazonEMRServerless
    {
        private static IServiceMetadata serviceMetadata = new AmazonEMRServerlessMetadata();
        
        #region Constructors
        /// 
        /// Constructs AmazonEMRServerlessClient 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 AmazonEMRServerlessClient()
            : base(FallbackCredentialsFactory.GetCredentials(), new AmazonEMRServerlessConfig()) { }
        /// 
        /// Constructs AmazonEMRServerlessClient 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 AmazonEMRServerlessClient(RegionEndpoint region)
            : base(FallbackCredentialsFactory.GetCredentials(), new AmazonEMRServerlessConfig{RegionEndpoint = region}) { }
        /// 
        /// Constructs AmazonEMRServerlessClient 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 AmazonEMRServerlessClient Configuration Object
        public AmazonEMRServerlessClient(AmazonEMRServerlessConfig config)
            : base(FallbackCredentialsFactory.GetCredentials(config), config){}
        /// 
        /// Constructs AmazonEMRServerlessClient with AWS Credentials
        /// 
        /// AWS Credentials
        public AmazonEMRServerlessClient(AWSCredentials credentials)
            : this(credentials, new AmazonEMRServerlessConfig())
        {
        }
        /// 
        /// Constructs AmazonEMRServerlessClient with AWS Credentials
        /// 
        /// AWS Credentials
        /// The region to connect.
        public AmazonEMRServerlessClient(AWSCredentials credentials, RegionEndpoint region)
            : this(credentials, new AmazonEMRServerlessConfig{RegionEndpoint = region})
        {
        }
        /// 
        /// Constructs AmazonEMRServerlessClient with AWS Credentials and an
        /// AmazonEMRServerlessClient Configuration object.
        /// 
        /// AWS Credentials
        /// The AmazonEMRServerlessClient Configuration Object
        public AmazonEMRServerlessClient(AWSCredentials credentials, AmazonEMRServerlessConfig clientConfig)
            : base(credentials, clientConfig)
        {
        }
        /// 
        /// Constructs AmazonEMRServerlessClient with AWS Access Key ID and AWS Secret Key
        /// 
        /// AWS Access Key ID
        /// AWS Secret Access Key
        public AmazonEMRServerlessClient(string awsAccessKeyId, string awsSecretAccessKey)
            : this(awsAccessKeyId, awsSecretAccessKey, new AmazonEMRServerlessConfig())
        {
        }
        /// 
        /// Constructs AmazonEMRServerlessClient with AWS Access Key ID and AWS Secret Key
        /// 
        /// AWS Access Key ID
        /// AWS Secret Access Key
        /// The region to connect.
        public AmazonEMRServerlessClient(string awsAccessKeyId, string awsSecretAccessKey, RegionEndpoint region)
            : this(awsAccessKeyId, awsSecretAccessKey, new AmazonEMRServerlessConfig() {RegionEndpoint=region})
        {
        }
        /// 
        /// Constructs AmazonEMRServerlessClient with AWS Access Key ID, AWS Secret Key and an
        /// AmazonEMRServerlessClient Configuration object. 
        /// 
        /// AWS Access Key ID
        /// AWS Secret Access Key
        /// The AmazonEMRServerlessClient Configuration Object
        public AmazonEMRServerlessClient(string awsAccessKeyId, string awsSecretAccessKey, AmazonEMRServerlessConfig clientConfig)
            : base(awsAccessKeyId, awsSecretAccessKey, clientConfig)
        {
        }
        /// 
        /// Constructs AmazonEMRServerlessClient with AWS Access Key ID and AWS Secret Key
        /// 
        /// AWS Access Key ID
        /// AWS Secret Access Key
        /// AWS Session Token
        public AmazonEMRServerlessClient(string awsAccessKeyId, string awsSecretAccessKey, string awsSessionToken)
            : this(awsAccessKeyId, awsSecretAccessKey, awsSessionToken, new AmazonEMRServerlessConfig())
        {
        }
        /// 
        /// Constructs AmazonEMRServerlessClient 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 AmazonEMRServerlessClient(string awsAccessKeyId, string awsSecretAccessKey, string awsSessionToken, RegionEndpoint region)
            : this(awsAccessKeyId, awsSecretAccessKey, awsSessionToken, new AmazonEMRServerlessConfig{RegionEndpoint = region})
        {
        }
        /// 
        /// Constructs AmazonEMRServerlessClient with AWS Access Key ID, AWS Secret Key and an
        /// AmazonEMRServerlessClient Configuration object. 
        /// 
        /// AWS Access Key ID
        /// AWS Secret Access Key
        /// AWS Session Token
        /// The AmazonEMRServerlessClient Configuration Object
        public AmazonEMRServerlessClient(string awsAccessKeyId, string awsSecretAccessKey, string awsSessionToken, AmazonEMRServerlessConfig clientConfig)
            : base(awsAccessKeyId, awsSecretAccessKey, awsSessionToken, clientConfig)
        {
        }
        #endregion
#if AWS_ASYNC_ENUMERABLES_API
        private IEMRServerlessPaginatorFactory _paginators;
        /// 
        /// Paginators for the service
        /// 
        public IEMRServerlessPaginatorFactory Paginators 
        {
            get 
            {
                if (this._paginators == null) 
                {
                    this._paginators = new EMRServerlessPaginatorFactory(this);
                }
                return this._paginators;
            }
        }
#endif
        #region Overrides
        /// 
        /// Creates the signer for the service.
        /// 
        protected override AbstractAWSSigner CreateSigner()
        {
            return new AWS4Signer();
        } 
        /// 
        /// Customizes the runtime pipeline.
        /// 
        /// Runtime pipeline for the current client.
        protected override void CustomizeRuntimePipeline(RuntimePipeline pipeline)
        {
            pipeline.RemoveHandler();
            pipeline.AddHandlerAfter(new AmazonEMRServerlessEndpointResolver());
        }
        /// 
        /// 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  CancelJobRun
        internal virtual CancelJobRunResponse CancelJobRun(CancelJobRunRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CancelJobRunRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CancelJobRunResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Cancels a job run.
        /// 
        /// Container for the necessary parameters to execute the CancelJobRun service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the CancelJobRun service method, as returned by EMRServerless.
        /// 
        /// Request processing failed because of an error or failure with the service.
        /// 
        /// 
        /// The specified resource was not found.
        /// 
        /// 
        /// The input fails to satisfy the constraints specified by an Amazon Web Services service.
        /// 
        /// REST API Reference for CancelJobRun Operation
        public virtual Task CancelJobRunAsync(CancelJobRunRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CancelJobRunRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CancelJobRunResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  CreateApplication
        internal virtual CreateApplicationResponse CreateApplication(CreateApplicationRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateApplicationRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateApplicationResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Creates an application.
        /// 
        /// Container for the necessary parameters to execute the CreateApplication service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the CreateApplication service method, as returned by EMRServerless.
        /// 
        /// The request could not be processed because of conflict in the current state of the
        /// resource.
        /// 
        /// 
        /// Request processing failed because of an error or failure with the service.
        /// 
        /// 
        /// The specified resource was not found.
        /// 
        /// 
        /// The input fails to satisfy the constraints specified by an Amazon Web Services service.
        /// 
        /// REST API Reference for CreateApplication Operation
        public virtual Task CreateApplicationAsync(CreateApplicationRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = CreateApplicationRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateApplicationResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  DeleteApplication
        internal virtual DeleteApplicationResponse DeleteApplication(DeleteApplicationRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = DeleteApplicationRequestMarshaller.Instance;
            options.ResponseUnmarshaller = DeleteApplicationResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Deletes an application. An application has to be in a stopped or created state in
        /// order to be deleted.
        /// 
        /// Container for the necessary parameters to execute the DeleteApplication service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the DeleteApplication service method, as returned by EMRServerless.
        /// 
        /// Request processing failed because of an error or failure with the service.
        /// 
        /// 
        /// The specified resource was not found.
        /// 
        /// 
        /// The input fails to satisfy the constraints specified by an Amazon Web Services service.
        /// 
        /// REST API Reference for DeleteApplication Operation
        public virtual Task DeleteApplicationAsync(DeleteApplicationRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = DeleteApplicationRequestMarshaller.Instance;
            options.ResponseUnmarshaller = DeleteApplicationResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  GetApplication
        internal virtual GetApplicationResponse GetApplication(GetApplicationRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = GetApplicationRequestMarshaller.Instance;
            options.ResponseUnmarshaller = GetApplicationResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Displays detailed information about a specified application.
        /// 
        /// Container for the necessary parameters to execute the GetApplication service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the GetApplication service method, as returned by EMRServerless.
        /// 
        /// Request processing failed because of an error or failure with the service.
        /// 
        /// 
        /// The specified resource was not found.
        /// 
        /// 
        /// The input fails to satisfy the constraints specified by an Amazon Web Services service.
        /// 
        /// REST API Reference for GetApplication Operation
        public virtual Task GetApplicationAsync(GetApplicationRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = GetApplicationRequestMarshaller.Instance;
            options.ResponseUnmarshaller = GetApplicationResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  GetDashboardForJobRun
        internal virtual GetDashboardForJobRunResponse GetDashboardForJobRun(GetDashboardForJobRunRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = GetDashboardForJobRunRequestMarshaller.Instance;
            options.ResponseUnmarshaller = GetDashboardForJobRunResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Creates and returns a URL that you can use to access the application UIs for a job
        /// run.
        /// 
        ///  
        /// 
        /// For jobs in a running state, the application UI is a live user interface such as the
        /// Spark or Tez web UI. For completed jobs, the application UI is a persistent application
        /// user interface such as the Spark History Server or persistent Tez UI.
        /// 
        ///   
        /// 
        /// The URL is valid for one hour after you generate it. To access the application UI
        /// after that hour elapses, you must invoke the API again to generate a new URL.
        /// 
        ///  
        /// 
        /// Container for the necessary parameters to execute the GetDashboardForJobRun service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the GetDashboardForJobRun service method, as returned by EMRServerless.
        /// 
        /// Request processing failed because of an error or failure with the service.
        /// 
        /// 
        /// The specified resource was not found.
        /// 
        /// 
        /// The input fails to satisfy the constraints specified by an Amazon Web Services service.
        /// 
        /// REST API Reference for GetDashboardForJobRun Operation
        public virtual Task GetDashboardForJobRunAsync(GetDashboardForJobRunRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = GetDashboardForJobRunRequestMarshaller.Instance;
            options.ResponseUnmarshaller = GetDashboardForJobRunResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  GetJobRun
        internal virtual GetJobRunResponse GetJobRun(GetJobRunRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = GetJobRunRequestMarshaller.Instance;
            options.ResponseUnmarshaller = GetJobRunResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Displays detailed information about a job run.
        /// 
        /// Container for the necessary parameters to execute the GetJobRun service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the GetJobRun service method, as returned by EMRServerless.
        /// 
        /// Request processing failed because of an error or failure with the service.
        /// 
        /// 
        /// The specified resource was not found.
        /// 
        /// 
        /// The input fails to satisfy the constraints specified by an Amazon Web Services service.
        /// 
        /// REST API Reference for GetJobRun Operation
        public virtual Task GetJobRunAsync(GetJobRunRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = GetJobRunRequestMarshaller.Instance;
            options.ResponseUnmarshaller = GetJobRunResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  ListApplications
        internal virtual ListApplicationsResponse ListApplications(ListApplicationsRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ListApplicationsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ListApplicationsResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Lists applications based on a set of parameters.
        /// 
        /// Container for the necessary parameters to execute the ListApplications service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the ListApplications service method, as returned by EMRServerless.
        /// 
        /// Request processing failed because of an error or failure with the service.
        /// 
        /// 
        /// The input fails to satisfy the constraints specified by an Amazon Web Services service.
        /// 
        /// REST API Reference for ListApplications Operation
        public virtual Task ListApplicationsAsync(ListApplicationsRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ListApplicationsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ListApplicationsResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  ListJobRuns
        internal virtual ListJobRunsResponse ListJobRuns(ListJobRunsRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ListJobRunsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ListJobRunsResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Lists job runs based on a set of parameters.
        /// 
        /// Container for the necessary parameters to execute the ListJobRuns service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the ListJobRuns service method, as returned by EMRServerless.
        /// 
        /// Request processing failed because of an error or failure with the service.
        /// 
        /// 
        /// The input fails to satisfy the constraints specified by an Amazon Web Services service.
        /// 
        /// REST API Reference for ListJobRuns Operation
        public virtual Task ListJobRunsAsync(ListJobRunsRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ListJobRunsRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ListJobRunsResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  ListTagsForResource
        internal virtual ListTagsForResourceResponse ListTagsForResource(ListTagsForResourceRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ListTagsForResourceRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ListTagsForResourceResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Lists the tags assigned to the resources.
        /// 
        /// Container for the necessary parameters to execute the ListTagsForResource service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the ListTagsForResource service method, as returned by EMRServerless.
        /// 
        /// Request processing failed because of an error or failure with the service.
        /// 
        /// 
        /// The specified resource was not found.
        /// 
        /// 
        /// The input fails to satisfy the constraints specified by an Amazon Web Services service.
        /// 
        /// REST API Reference for ListTagsForResource Operation
        public virtual Task ListTagsForResourceAsync(ListTagsForResourceRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = ListTagsForResourceRequestMarshaller.Instance;
            options.ResponseUnmarshaller = ListTagsForResourceResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  StartApplication
        internal virtual StartApplicationResponse StartApplication(StartApplicationRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = StartApplicationRequestMarshaller.Instance;
            options.ResponseUnmarshaller = StartApplicationResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Starts a specified application and initializes initial capacity if configured.
        /// 
        /// Container for the necessary parameters to execute the StartApplication service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the StartApplication service method, as returned by EMRServerless.
        /// 
        /// Request processing failed because of an error or failure with the service.
        /// 
        /// 
        /// The specified resource was not found.
        /// 
        /// 
        /// The maximum number of resources per account has been reached.
        /// 
        /// 
        /// The input fails to satisfy the constraints specified by an Amazon Web Services service.
        /// 
        /// REST API Reference for StartApplication Operation
        public virtual Task StartApplicationAsync(StartApplicationRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = StartApplicationRequestMarshaller.Instance;
            options.ResponseUnmarshaller = StartApplicationResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  StartJobRun
        internal virtual StartJobRunResponse StartJobRun(StartJobRunRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = StartJobRunRequestMarshaller.Instance;
            options.ResponseUnmarshaller = StartJobRunResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Starts a job run.
        /// 
        /// Container for the necessary parameters to execute the StartJobRun service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the StartJobRun service method, as returned by EMRServerless.
        /// 
        /// The request could not be processed because of conflict in the current state of the
        /// resource.
        /// 
        /// 
        /// Request processing failed because of an error or failure with the service.
        /// 
        /// 
        /// The specified resource was not found.
        /// 
        /// 
        /// The input fails to satisfy the constraints specified by an Amazon Web Services service.
        /// 
        /// REST API Reference for StartJobRun Operation
        public virtual Task StartJobRunAsync(StartJobRunRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = StartJobRunRequestMarshaller.Instance;
            options.ResponseUnmarshaller = StartJobRunResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  StopApplication
        internal virtual StopApplicationResponse StopApplication(StopApplicationRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = StopApplicationRequestMarshaller.Instance;
            options.ResponseUnmarshaller = StopApplicationResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Stops a specified application and releases initial capacity if configured. All scheduled
        /// and running jobs must be completed or cancelled before stopping an application.
        /// 
        /// Container for the necessary parameters to execute the StopApplication service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the StopApplication service method, as returned by EMRServerless.
        /// 
        /// Request processing failed because of an error or failure with the service.
        /// 
        /// 
        /// The specified resource was not found.
        /// 
        /// 
        /// The input fails to satisfy the constraints specified by an Amazon Web Services service.
        /// 
        /// REST API Reference for StopApplication Operation
        public virtual Task StopApplicationAsync(StopApplicationRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = StopApplicationRequestMarshaller.Instance;
            options.ResponseUnmarshaller = StopApplicationResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  TagResource
        internal virtual TagResourceResponse TagResource(TagResourceRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = TagResourceRequestMarshaller.Instance;
            options.ResponseUnmarshaller = TagResourceResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Assigns tags to resources. A tag is a label that you assign to an Amazon Web Services
        /// resource. Each tag consists of a key and an optional value, both of which you define.
        /// Tags enable you to categorize your Amazon Web Services resources by attributes such
        /// as purpose, owner, or environment. When you have many resources of the same type,
        /// you can quickly identify a specific resource based on the tags you've assigned to
        /// it.
        /// 
        /// Container for the necessary parameters to execute the TagResource service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the TagResource service method, as returned by EMRServerless.
        /// 
        /// Request processing failed because of an error or failure with the service.
        /// 
        /// 
        /// The specified resource was not found.
        /// 
        /// 
        /// The input fails to satisfy the constraints specified by an Amazon Web Services service.
        /// 
        /// REST API Reference for TagResource Operation
        public virtual Task TagResourceAsync(TagResourceRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = TagResourceRequestMarshaller.Instance;
            options.ResponseUnmarshaller = TagResourceResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  UntagResource
        internal virtual UntagResourceResponse UntagResource(UntagResourceRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = UntagResourceRequestMarshaller.Instance;
            options.ResponseUnmarshaller = UntagResourceResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Removes tags from resources.
        /// 
        /// Container for the necessary parameters to execute the UntagResource service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the UntagResource service method, as returned by EMRServerless.
        /// 
        /// Request processing failed because of an error or failure with the service.
        /// 
        /// 
        /// The specified resource was not found.
        /// 
        /// 
        /// The input fails to satisfy the constraints specified by an Amazon Web Services service.
        /// 
        /// REST API Reference for UntagResource Operation
        public virtual Task UntagResourceAsync(UntagResourceRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = UntagResourceRequestMarshaller.Instance;
            options.ResponseUnmarshaller = UntagResourceResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
        #region  UpdateApplication
        internal virtual UpdateApplicationResponse UpdateApplication(UpdateApplicationRequest request)
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = UpdateApplicationRequestMarshaller.Instance;
            options.ResponseUnmarshaller = UpdateApplicationResponseUnmarshaller.Instance;
            return Invoke(request, options);
        }
        /// 
        /// Updates a specified application. An application has to be in a stopped or created
        /// state in order to be updated.
        /// 
        /// Container for the necessary parameters to execute the UpdateApplication service method.
        /// 
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// 
        /// 
        /// The response from the UpdateApplication service method, as returned by EMRServerless.
        /// 
        /// Request processing failed because of an error or failure with the service.
        /// 
        /// 
        /// The specified resource was not found.
        /// 
        /// 
        /// The input fails to satisfy the constraints specified by an Amazon Web Services service.
        /// 
        /// REST API Reference for UpdateApplication Operation
        public virtual Task UpdateApplicationAsync(UpdateApplicationRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var options = new InvokeOptions();
            options.RequestMarshaller = UpdateApplicationRequestMarshaller.Instance;
            options.ResponseUnmarshaller = UpdateApplicationResponseUnmarshaller.Instance;
            return InvokeAsync(request, options, cancellationToken);
        }
        #endregion
        
    }
}