/**
 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
 * SPDX-License-Identifier: Apache-2.0.
 */
#pragma once
#include 
#include 
#include 
#include 
#include 
#include 
namespace Aws
{
namespace GlueDataBrew
{
  /**
   * Glue DataBrew is a visual, cloud-scale data-preparation service. DataBrew
   * simplifies data preparation tasks, targeting data issues that are hard to spot
   * and time-consuming to fix. DataBrew empowers users of all technical levels to
   * visualize the data and perform one-click data transformations, with no coding
   * required.
   */
  class AWS_GLUEDATABREW_API GlueDataBrewClient : public Aws::Client::AWSJsonClient, public Aws::Client::ClientWithAsyncTemplateMethods
  {
    public:
      typedef Aws::Client::AWSJsonClient BASECLASS;
      static const char* SERVICE_NAME;
      static const char* ALLOCATION_TAG;
      typedef GlueDataBrewClientConfiguration ClientConfigurationType;
      typedef GlueDataBrewEndpointProvider EndpointProviderType;
       /**
        * Initializes client to use DefaultCredentialProviderChain, with default http client factory, and optional client config. If client config
        * is not specified, it will be initialized to default values.
        */
        GlueDataBrewClient(const Aws::GlueDataBrew::GlueDataBrewClientConfiguration& clientConfiguration = Aws::GlueDataBrew::GlueDataBrewClientConfiguration(),
                           std::shared_ptr endpointProvider = Aws::MakeShared(ALLOCATION_TAG));
       /**
        * Initializes client to use SimpleAWSCredentialsProvider, with default http client factory, and optional client config. If client config
        * is not specified, it will be initialized to default values.
        */
        GlueDataBrewClient(const Aws::Auth::AWSCredentials& credentials,
                           std::shared_ptr endpointProvider = Aws::MakeShared(ALLOCATION_TAG),
                           const Aws::GlueDataBrew::GlueDataBrewClientConfiguration& clientConfiguration = Aws::GlueDataBrew::GlueDataBrewClientConfiguration());
       /**
        * Initializes client to use specified credentials provider with specified client config. If http client factory is not supplied,
        * the default http client factory will be used
        */
        GlueDataBrewClient(const std::shared_ptr& credentialsProvider,
                           std::shared_ptr endpointProvider = Aws::MakeShared(ALLOCATION_TAG),
                           const Aws::GlueDataBrew::GlueDataBrewClientConfiguration& clientConfiguration = Aws::GlueDataBrew::GlueDataBrewClientConfiguration());
        /* Legacy constructors due deprecation */
       /**
        * Initializes client to use DefaultCredentialProviderChain, with default http client factory, and optional client config. If client config
        * is not specified, it will be initialized to default values.
        */
        GlueDataBrewClient(const Aws::Client::ClientConfiguration& clientConfiguration);
       /**
        * Initializes client to use SimpleAWSCredentialsProvider, with default http client factory, and optional client config. If client config
        * is not specified, it will be initialized to default values.
        */
        GlueDataBrewClient(const Aws::Auth::AWSCredentials& credentials,
                           const Aws::Client::ClientConfiguration& clientConfiguration);
       /**
        * Initializes client to use specified credentials provider with specified client config. If http client factory is not supplied,
        * the default http client factory will be used
        */
        GlueDataBrewClient(const std::shared_ptr& credentialsProvider,
                           const Aws::Client::ClientConfiguration& clientConfiguration);
        /* End of legacy constructors due deprecation */
        virtual ~GlueDataBrewClient();
        /**
         * Deletes one or more versions of a recipe at a time.
 The entire request
         * will be rejected if:
  -  
The recipe does not exist.
   - 
         * 
There is an invalid version identifier in the list of versions.
  
         * -  
The version list is empty.
   -  
The version list size
         * exceeds 50.
   -  
The version list contains duplicate entries.
         *   
 The request will complete successfully, but with partial
         * failures, if:
  -  
A version does not exist.
   -  
A
         * version is being used by a job.
   -  
You specify
         * LATEST_WORKING, but it's being used by a project.
   - 
         * 
The version fails to be deleted.
   
 The
         * LATEST_WORKING version will only be deleted if the recipe has no
         * other versions. If you try to delete LATEST_WORKING while other
         * versions exist (or if they can't be deleted), then LATEST_WORKING
         * will be listed as partial failure in the response.
See Also:
   AWS
         * API Reference
         */
        virtual Model::BatchDeleteRecipeVersionOutcome BatchDeleteRecipeVersion(const Model::BatchDeleteRecipeVersionRequest& request) const;
        /**
         * A Callable wrapper for BatchDeleteRecipeVersion that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::BatchDeleteRecipeVersionOutcomeCallable BatchDeleteRecipeVersionCallable(const BatchDeleteRecipeVersionRequestT& request) const
        {
            return SubmitCallable(&GlueDataBrewClient::BatchDeleteRecipeVersion, request);
        }
        /**
         * An Async wrapper for BatchDeleteRecipeVersion that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void BatchDeleteRecipeVersionAsync(const BatchDeleteRecipeVersionRequestT& request, const BatchDeleteRecipeVersionResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&GlueDataBrewClient::BatchDeleteRecipeVersion, request, handler, context);
        }
        /**
         * Creates a new DataBrew dataset.
See Also:
   AWS
         * API Reference
         */
        virtual Model::CreateDatasetOutcome CreateDataset(const Model::CreateDatasetRequest& request) const;
        /**
         * A Callable wrapper for CreateDataset that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::CreateDatasetOutcomeCallable CreateDatasetCallable(const CreateDatasetRequestT& request) const
        {
            return SubmitCallable(&GlueDataBrewClient::CreateDataset, request);
        }
        /**
         * An Async wrapper for CreateDataset that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void CreateDatasetAsync(const CreateDatasetRequestT& request, const CreateDatasetResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&GlueDataBrewClient::CreateDataset, request, handler, context);
        }
        /**
         * Creates a new job to analyze a dataset and create its data
         * profile.
See Also:
   AWS
         * API Reference
         */
        virtual Model::CreateProfileJobOutcome CreateProfileJob(const Model::CreateProfileJobRequest& request) const;
        /**
         * A Callable wrapper for CreateProfileJob that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::CreateProfileJobOutcomeCallable CreateProfileJobCallable(const CreateProfileJobRequestT& request) const
        {
            return SubmitCallable(&GlueDataBrewClient::CreateProfileJob, request);
        }
        /**
         * An Async wrapper for CreateProfileJob that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void CreateProfileJobAsync(const CreateProfileJobRequestT& request, const CreateProfileJobResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&GlueDataBrewClient::CreateProfileJob, request, handler, context);
        }
        /**
         * Creates a new DataBrew project.
See Also:
   AWS
         * API Reference
         */
        virtual Model::CreateProjectOutcome CreateProject(const Model::CreateProjectRequest& request) const;
        /**
         * A Callable wrapper for CreateProject that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::CreateProjectOutcomeCallable CreateProjectCallable(const CreateProjectRequestT& request) const
        {
            return SubmitCallable(&GlueDataBrewClient::CreateProject, request);
        }
        /**
         * An Async wrapper for CreateProject that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void CreateProjectAsync(const CreateProjectRequestT& request, const CreateProjectResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&GlueDataBrewClient::CreateProject, request, handler, context);
        }
        /**
         * Creates a new DataBrew recipe.
See Also:
   AWS
         * API Reference
         */
        virtual Model::CreateRecipeOutcome CreateRecipe(const Model::CreateRecipeRequest& request) const;
        /**
         * A Callable wrapper for CreateRecipe that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::CreateRecipeOutcomeCallable CreateRecipeCallable(const CreateRecipeRequestT& request) const
        {
            return SubmitCallable(&GlueDataBrewClient::CreateRecipe, request);
        }
        /**
         * An Async wrapper for CreateRecipe that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void CreateRecipeAsync(const CreateRecipeRequestT& request, const CreateRecipeResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&GlueDataBrewClient::CreateRecipe, request, handler, context);
        }
        /**
         * Creates a new job to transform input data, using steps defined in an existing
         * Glue DataBrew recipe
See Also:
   AWS
         * API Reference
         */
        virtual Model::CreateRecipeJobOutcome CreateRecipeJob(const Model::CreateRecipeJobRequest& request) const;
        /**
         * A Callable wrapper for CreateRecipeJob that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::CreateRecipeJobOutcomeCallable CreateRecipeJobCallable(const CreateRecipeJobRequestT& request) const
        {
            return SubmitCallable(&GlueDataBrewClient::CreateRecipeJob, request);
        }
        /**
         * An Async wrapper for CreateRecipeJob that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void CreateRecipeJobAsync(const CreateRecipeJobRequestT& request, const CreateRecipeJobResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&GlueDataBrewClient::CreateRecipeJob, request, handler, context);
        }
        /**
         * Creates a new ruleset that can be used in a profile job to validate the data
         * quality of a dataset.
See Also:
   AWS
         * API Reference
         */
        virtual Model::CreateRulesetOutcome CreateRuleset(const Model::CreateRulesetRequest& request) const;
        /**
         * A Callable wrapper for CreateRuleset that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::CreateRulesetOutcomeCallable CreateRulesetCallable(const CreateRulesetRequestT& request) const
        {
            return SubmitCallable(&GlueDataBrewClient::CreateRuleset, request);
        }
        /**
         * An Async wrapper for CreateRuleset that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void CreateRulesetAsync(const CreateRulesetRequestT& request, const CreateRulesetResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&GlueDataBrewClient::CreateRuleset, request, handler, context);
        }
        /**
         * Creates a new schedule for one or more DataBrew jobs. Jobs can be run at a
         * specific date and time, or at regular intervals.
See Also:
   AWS
         * API Reference
         */
        virtual Model::CreateScheduleOutcome CreateSchedule(const Model::CreateScheduleRequest& request) const;
        /**
         * A Callable wrapper for CreateSchedule that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::CreateScheduleOutcomeCallable CreateScheduleCallable(const CreateScheduleRequestT& request) const
        {
            return SubmitCallable(&GlueDataBrewClient::CreateSchedule, request);
        }
        /**
         * An Async wrapper for CreateSchedule that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void CreateScheduleAsync(const CreateScheduleRequestT& request, const CreateScheduleResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&GlueDataBrewClient::CreateSchedule, request, handler, context);
        }
        /**
         * Deletes a dataset from DataBrew.
See Also:
   AWS
         * API Reference
         */
        virtual Model::DeleteDatasetOutcome DeleteDataset(const Model::DeleteDatasetRequest& request) const;
        /**
         * A Callable wrapper for DeleteDataset that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::DeleteDatasetOutcomeCallable DeleteDatasetCallable(const DeleteDatasetRequestT& request) const
        {
            return SubmitCallable(&GlueDataBrewClient::DeleteDataset, request);
        }
        /**
         * An Async wrapper for DeleteDataset that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void DeleteDatasetAsync(const DeleteDatasetRequestT& request, const DeleteDatasetResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&GlueDataBrewClient::DeleteDataset, request, handler, context);
        }
        /**
         * Deletes the specified DataBrew job.
See Also:
   AWS
         * API Reference
         */
        virtual Model::DeleteJobOutcome DeleteJob(const Model::DeleteJobRequest& request) const;
        /**
         * A Callable wrapper for DeleteJob that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::DeleteJobOutcomeCallable DeleteJobCallable(const DeleteJobRequestT& request) const
        {
            return SubmitCallable(&GlueDataBrewClient::DeleteJob, request);
        }
        /**
         * An Async wrapper for DeleteJob that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void DeleteJobAsync(const DeleteJobRequestT& request, const DeleteJobResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&GlueDataBrewClient::DeleteJob, request, handler, context);
        }
        /**
         * Deletes an existing DataBrew project.
See Also:
   AWS
         * API Reference
         */
        virtual Model::DeleteProjectOutcome DeleteProject(const Model::DeleteProjectRequest& request) const;
        /**
         * A Callable wrapper for DeleteProject that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::DeleteProjectOutcomeCallable DeleteProjectCallable(const DeleteProjectRequestT& request) const
        {
            return SubmitCallable(&GlueDataBrewClient::DeleteProject, request);
        }
        /**
         * An Async wrapper for DeleteProject that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void DeleteProjectAsync(const DeleteProjectRequestT& request, const DeleteProjectResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&GlueDataBrewClient::DeleteProject, request, handler, context);
        }
        /**
         * Deletes a single version of a DataBrew recipe.
See Also:
   AWS
         * API Reference
         */
        virtual Model::DeleteRecipeVersionOutcome DeleteRecipeVersion(const Model::DeleteRecipeVersionRequest& request) const;
        /**
         * A Callable wrapper for DeleteRecipeVersion that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::DeleteRecipeVersionOutcomeCallable DeleteRecipeVersionCallable(const DeleteRecipeVersionRequestT& request) const
        {
            return SubmitCallable(&GlueDataBrewClient::DeleteRecipeVersion, request);
        }
        /**
         * An Async wrapper for DeleteRecipeVersion that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void DeleteRecipeVersionAsync(const DeleteRecipeVersionRequestT& request, const DeleteRecipeVersionResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&GlueDataBrewClient::DeleteRecipeVersion, request, handler, context);
        }
        /**
         * Deletes a ruleset.
See Also:
   AWS
         * API Reference
         */
        virtual Model::DeleteRulesetOutcome DeleteRuleset(const Model::DeleteRulesetRequest& request) const;
        /**
         * A Callable wrapper for DeleteRuleset that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::DeleteRulesetOutcomeCallable DeleteRulesetCallable(const DeleteRulesetRequestT& request) const
        {
            return SubmitCallable(&GlueDataBrewClient::DeleteRuleset, request);
        }
        /**
         * An Async wrapper for DeleteRuleset that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void DeleteRulesetAsync(const DeleteRulesetRequestT& request, const DeleteRulesetResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&GlueDataBrewClient::DeleteRuleset, request, handler, context);
        }
        /**
         * Deletes the specified DataBrew schedule.
See Also:
   AWS
         * API Reference
         */
        virtual Model::DeleteScheduleOutcome DeleteSchedule(const Model::DeleteScheduleRequest& request) const;
        /**
         * A Callable wrapper for DeleteSchedule that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::DeleteScheduleOutcomeCallable DeleteScheduleCallable(const DeleteScheduleRequestT& request) const
        {
            return SubmitCallable(&GlueDataBrewClient::DeleteSchedule, request);
        }
        /**
         * An Async wrapper for DeleteSchedule that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void DeleteScheduleAsync(const DeleteScheduleRequestT& request, const DeleteScheduleResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&GlueDataBrewClient::DeleteSchedule, request, handler, context);
        }
        /**
         * Returns the definition of a specific DataBrew dataset.
See
         * Also:
   AWS
         * API Reference
         */
        virtual Model::DescribeDatasetOutcome DescribeDataset(const Model::DescribeDatasetRequest& request) const;
        /**
         * A Callable wrapper for DescribeDataset that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::DescribeDatasetOutcomeCallable DescribeDatasetCallable(const DescribeDatasetRequestT& request) const
        {
            return SubmitCallable(&GlueDataBrewClient::DescribeDataset, request);
        }
        /**
         * An Async wrapper for DescribeDataset that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void DescribeDatasetAsync(const DescribeDatasetRequestT& request, const DescribeDatasetResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&GlueDataBrewClient::DescribeDataset, request, handler, context);
        }
        /**
         * Returns the definition of a specific DataBrew job.
See Also:
  
         * AWS
         * API Reference
         */
        virtual Model::DescribeJobOutcome DescribeJob(const Model::DescribeJobRequest& request) const;
        /**
         * A Callable wrapper for DescribeJob that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::DescribeJobOutcomeCallable DescribeJobCallable(const DescribeJobRequestT& request) const
        {
            return SubmitCallable(&GlueDataBrewClient::DescribeJob, request);
        }
        /**
         * An Async wrapper for DescribeJob that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void DescribeJobAsync(const DescribeJobRequestT& request, const DescribeJobResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&GlueDataBrewClient::DescribeJob, request, handler, context);
        }
        /**
         * Represents one run of a DataBrew job.
See Also:
   AWS
         * API Reference
         */
        virtual Model::DescribeJobRunOutcome DescribeJobRun(const Model::DescribeJobRunRequest& request) const;
        /**
         * A Callable wrapper for DescribeJobRun that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::DescribeJobRunOutcomeCallable DescribeJobRunCallable(const DescribeJobRunRequestT& request) const
        {
            return SubmitCallable(&GlueDataBrewClient::DescribeJobRun, request);
        }
        /**
         * An Async wrapper for DescribeJobRun that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void DescribeJobRunAsync(const DescribeJobRunRequestT& request, const DescribeJobRunResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&GlueDataBrewClient::DescribeJobRun, request, handler, context);
        }
        /**
         * Returns the definition of a specific DataBrew project.
See
         * Also:
   AWS
         * API Reference
         */
        virtual Model::DescribeProjectOutcome DescribeProject(const Model::DescribeProjectRequest& request) const;
        /**
         * A Callable wrapper for DescribeProject that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::DescribeProjectOutcomeCallable DescribeProjectCallable(const DescribeProjectRequestT& request) const
        {
            return SubmitCallable(&GlueDataBrewClient::DescribeProject, request);
        }
        /**
         * An Async wrapper for DescribeProject that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void DescribeProjectAsync(const DescribeProjectRequestT& request, const DescribeProjectResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&GlueDataBrewClient::DescribeProject, request, handler, context);
        }
        /**
         * Returns the definition of a specific DataBrew recipe corresponding to a
         * particular version.
See Also:
   AWS
         * API Reference
         */
        virtual Model::DescribeRecipeOutcome DescribeRecipe(const Model::DescribeRecipeRequest& request) const;
        /**
         * A Callable wrapper for DescribeRecipe that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::DescribeRecipeOutcomeCallable DescribeRecipeCallable(const DescribeRecipeRequestT& request) const
        {
            return SubmitCallable(&GlueDataBrewClient::DescribeRecipe, request);
        }
        /**
         * An Async wrapper for DescribeRecipe that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void DescribeRecipeAsync(const DescribeRecipeRequestT& request, const DescribeRecipeResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&GlueDataBrewClient::DescribeRecipe, request, handler, context);
        }
        /**
         * Retrieves detailed information about the ruleset.
See Also:
  
         * AWS
         * API Reference
         */
        virtual Model::DescribeRulesetOutcome DescribeRuleset(const Model::DescribeRulesetRequest& request) const;
        /**
         * A Callable wrapper for DescribeRuleset that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::DescribeRulesetOutcomeCallable DescribeRulesetCallable(const DescribeRulesetRequestT& request) const
        {
            return SubmitCallable(&GlueDataBrewClient::DescribeRuleset, request);
        }
        /**
         * An Async wrapper for DescribeRuleset that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void DescribeRulesetAsync(const DescribeRulesetRequestT& request, const DescribeRulesetResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&GlueDataBrewClient::DescribeRuleset, request, handler, context);
        }
        /**
         * Returns the definition of a specific DataBrew schedule.
See
         * Also:
   AWS
         * API Reference
         */
        virtual Model::DescribeScheduleOutcome DescribeSchedule(const Model::DescribeScheduleRequest& request) const;
        /**
         * A Callable wrapper for DescribeSchedule that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::DescribeScheduleOutcomeCallable DescribeScheduleCallable(const DescribeScheduleRequestT& request) const
        {
            return SubmitCallable(&GlueDataBrewClient::DescribeSchedule, request);
        }
        /**
         * An Async wrapper for DescribeSchedule that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void DescribeScheduleAsync(const DescribeScheduleRequestT& request, const DescribeScheduleResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&GlueDataBrewClient::DescribeSchedule, request, handler, context);
        }
        /**
         * Lists all of the DataBrew datasets.
See Also:
   AWS
         * API Reference
         */
        virtual Model::ListDatasetsOutcome ListDatasets(const Model::ListDatasetsRequest& request) const;
        /**
         * A Callable wrapper for ListDatasets that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::ListDatasetsOutcomeCallable ListDatasetsCallable(const ListDatasetsRequestT& request) const
        {
            return SubmitCallable(&GlueDataBrewClient::ListDatasets, request);
        }
        /**
         * An Async wrapper for ListDatasets that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void ListDatasetsAsync(const ListDatasetsRequestT& request, const ListDatasetsResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&GlueDataBrewClient::ListDatasets, request, handler, context);
        }
        /**
         * Lists all of the previous runs of a particular DataBrew job.
See
         * Also:
   AWS
         * API Reference
         */
        virtual Model::ListJobRunsOutcome ListJobRuns(const Model::ListJobRunsRequest& request) const;
        /**
         * A Callable wrapper for ListJobRuns that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::ListJobRunsOutcomeCallable ListJobRunsCallable(const ListJobRunsRequestT& request) const
        {
            return SubmitCallable(&GlueDataBrewClient::ListJobRuns, request);
        }
        /**
         * An Async wrapper for ListJobRuns that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void ListJobRunsAsync(const ListJobRunsRequestT& request, const ListJobRunsResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&GlueDataBrewClient::ListJobRuns, request, handler, context);
        }
        /**
         * Lists all of the DataBrew jobs that are defined.
See Also:
  
         * AWS
         * API Reference
         */
        virtual Model::ListJobsOutcome ListJobs(const Model::ListJobsRequest& request) const;
        /**
         * A Callable wrapper for ListJobs that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::ListJobsOutcomeCallable ListJobsCallable(const ListJobsRequestT& request) const
        {
            return SubmitCallable(&GlueDataBrewClient::ListJobs, request);
        }
        /**
         * An Async wrapper for ListJobs that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void ListJobsAsync(const ListJobsRequestT& request, const ListJobsResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&GlueDataBrewClient::ListJobs, request, handler, context);
        }
        /**
         * Lists all of the DataBrew projects that are defined.
See Also:
         * AWS
         * API Reference
         */
        virtual Model::ListProjectsOutcome ListProjects(const Model::ListProjectsRequest& request) const;
        /**
         * A Callable wrapper for ListProjects that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::ListProjectsOutcomeCallable ListProjectsCallable(const ListProjectsRequestT& request) const
        {
            return SubmitCallable(&GlueDataBrewClient::ListProjects, request);
        }
        /**
         * An Async wrapper for ListProjects that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void ListProjectsAsync(const ListProjectsRequestT& request, const ListProjectsResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&GlueDataBrewClient::ListProjects, request, handler, context);
        }
        /**
         * Lists the versions of a particular DataBrew recipe, except for
         * LATEST_WORKING.
See Also:
   AWS
         * API Reference
         */
        virtual Model::ListRecipeVersionsOutcome ListRecipeVersions(const Model::ListRecipeVersionsRequest& request) const;
        /**
         * A Callable wrapper for ListRecipeVersions that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::ListRecipeVersionsOutcomeCallable ListRecipeVersionsCallable(const ListRecipeVersionsRequestT& request) const
        {
            return SubmitCallable(&GlueDataBrewClient::ListRecipeVersions, request);
        }
        /**
         * An Async wrapper for ListRecipeVersions that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void ListRecipeVersionsAsync(const ListRecipeVersionsRequestT& request, const ListRecipeVersionsResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&GlueDataBrewClient::ListRecipeVersions, request, handler, context);
        }
        /**
         * Lists all of the DataBrew recipes that are defined.
See Also:
 
         * AWS
         * API Reference
         */
        virtual Model::ListRecipesOutcome ListRecipes(const Model::ListRecipesRequest& request) const;
        /**
         * A Callable wrapper for ListRecipes that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::ListRecipesOutcomeCallable ListRecipesCallable(const ListRecipesRequestT& request) const
        {
            return SubmitCallable(&GlueDataBrewClient::ListRecipes, request);
        }
        /**
         * An Async wrapper for ListRecipes that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void ListRecipesAsync(const ListRecipesRequestT& request, const ListRecipesResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&GlueDataBrewClient::ListRecipes, request, handler, context);
        }
        /**
         * List all rulesets available in the current account or rulesets associated
         * with a specific resource (dataset).
See Also:
   AWS
         * API Reference
         */
        virtual Model::ListRulesetsOutcome ListRulesets(const Model::ListRulesetsRequest& request) const;
        /**
         * A Callable wrapper for ListRulesets that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::ListRulesetsOutcomeCallable ListRulesetsCallable(const ListRulesetsRequestT& request) const
        {
            return SubmitCallable(&GlueDataBrewClient::ListRulesets, request);
        }
        /**
         * An Async wrapper for ListRulesets that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void ListRulesetsAsync(const ListRulesetsRequestT& request, const ListRulesetsResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&GlueDataBrewClient::ListRulesets, request, handler, context);
        }
        /**
         * Lists the DataBrew schedules that are defined.
See Also:
   AWS
         * API Reference
         */
        virtual Model::ListSchedulesOutcome ListSchedules(const Model::ListSchedulesRequest& request) const;
        /**
         * A Callable wrapper for ListSchedules that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::ListSchedulesOutcomeCallable ListSchedulesCallable(const ListSchedulesRequestT& request) const
        {
            return SubmitCallable(&GlueDataBrewClient::ListSchedules, request);
        }
        /**
         * An Async wrapper for ListSchedules that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void ListSchedulesAsync(const ListSchedulesRequestT& request, const ListSchedulesResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&GlueDataBrewClient::ListSchedules, request, handler, context);
        }
        /**
         * Lists all the tags for a DataBrew resource. 
See Also:
   AWS
         * API Reference
         */
        virtual Model::ListTagsForResourceOutcome ListTagsForResource(const Model::ListTagsForResourceRequest& request) const;
        /**
         * A Callable wrapper for ListTagsForResource that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::ListTagsForResourceOutcomeCallable ListTagsForResourceCallable(const ListTagsForResourceRequestT& request) const
        {
            return SubmitCallable(&GlueDataBrewClient::ListTagsForResource, request);
        }
        /**
         * An Async wrapper for ListTagsForResource that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void ListTagsForResourceAsync(const ListTagsForResourceRequestT& request, const ListTagsForResourceResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&GlueDataBrewClient::ListTagsForResource, request, handler, context);
        }
        /**
         * Publishes a new version of a DataBrew recipe.
See Also:
   AWS
         * API Reference
         */
        virtual Model::PublishRecipeOutcome PublishRecipe(const Model::PublishRecipeRequest& request) const;
        /**
         * A Callable wrapper for PublishRecipe that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::PublishRecipeOutcomeCallable PublishRecipeCallable(const PublishRecipeRequestT& request) const
        {
            return SubmitCallable(&GlueDataBrewClient::PublishRecipe, request);
        }
        /**
         * An Async wrapper for PublishRecipe that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void PublishRecipeAsync(const PublishRecipeRequestT& request, const PublishRecipeResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&GlueDataBrewClient::PublishRecipe, request, handler, context);
        }
        /**
         * Performs a recipe step within an interactive DataBrew session that's
         * currently open.
See Also:
   AWS
         * API Reference
         */
        virtual Model::SendProjectSessionActionOutcome SendProjectSessionAction(const Model::SendProjectSessionActionRequest& request) const;
        /**
         * A Callable wrapper for SendProjectSessionAction that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::SendProjectSessionActionOutcomeCallable SendProjectSessionActionCallable(const SendProjectSessionActionRequestT& request) const
        {
            return SubmitCallable(&GlueDataBrewClient::SendProjectSessionAction, request);
        }
        /**
         * An Async wrapper for SendProjectSessionAction that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void SendProjectSessionActionAsync(const SendProjectSessionActionRequestT& request, const SendProjectSessionActionResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&GlueDataBrewClient::SendProjectSessionAction, request, handler, context);
        }
        /**
         * Runs a DataBrew job.
See Also:
   AWS
         * API Reference
         */
        virtual Model::StartJobRunOutcome StartJobRun(const Model::StartJobRunRequest& request) const;
        /**
         * A Callable wrapper for StartJobRun that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::StartJobRunOutcomeCallable StartJobRunCallable(const StartJobRunRequestT& request) const
        {
            return SubmitCallable(&GlueDataBrewClient::StartJobRun, request);
        }
        /**
         * An Async wrapper for StartJobRun that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void StartJobRunAsync(const StartJobRunRequestT& request, const StartJobRunResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&GlueDataBrewClient::StartJobRun, request, handler, context);
        }
        /**
         * Creates an interactive session, enabling you to manipulate data in a DataBrew
         * project.
See Also:
   AWS
         * API Reference
         */
        virtual Model::StartProjectSessionOutcome StartProjectSession(const Model::StartProjectSessionRequest& request) const;
        /**
         * A Callable wrapper for StartProjectSession that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::StartProjectSessionOutcomeCallable StartProjectSessionCallable(const StartProjectSessionRequestT& request) const
        {
            return SubmitCallable(&GlueDataBrewClient::StartProjectSession, request);
        }
        /**
         * An Async wrapper for StartProjectSession that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void StartProjectSessionAsync(const StartProjectSessionRequestT& request, const StartProjectSessionResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&GlueDataBrewClient::StartProjectSession, request, handler, context);
        }
        /**
         * Stops a particular run of a job.
See Also:
   AWS
         * API Reference
         */
        virtual Model::StopJobRunOutcome StopJobRun(const Model::StopJobRunRequest& request) const;
        /**
         * A Callable wrapper for StopJobRun that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::StopJobRunOutcomeCallable StopJobRunCallable(const StopJobRunRequestT& request) const
        {
            return SubmitCallable(&GlueDataBrewClient::StopJobRun, request);
        }
        /**
         * An Async wrapper for StopJobRun that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void StopJobRunAsync(const StopJobRunRequestT& request, const StopJobRunResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&GlueDataBrewClient::StopJobRun, request, handler, context);
        }
        /**
         * Adds metadata tags to a DataBrew resource, such as a dataset, project,
         * recipe, job, or schedule.
See Also:
   AWS
         * API Reference
         */
        virtual Model::TagResourceOutcome TagResource(const Model::TagResourceRequest& request) const;
        /**
         * A Callable wrapper for TagResource that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::TagResourceOutcomeCallable TagResourceCallable(const TagResourceRequestT& request) const
        {
            return SubmitCallable(&GlueDataBrewClient::TagResource, request);
        }
        /**
         * An Async wrapper for TagResource that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void TagResourceAsync(const TagResourceRequestT& request, const TagResourceResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&GlueDataBrewClient::TagResource, request, handler, context);
        }
        /**
         * Removes metadata tags from a DataBrew resource.
See Also:
   AWS
         * API Reference
         */
        virtual Model::UntagResourceOutcome UntagResource(const Model::UntagResourceRequest& request) const;
        /**
         * A Callable wrapper for UntagResource that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::UntagResourceOutcomeCallable UntagResourceCallable(const UntagResourceRequestT& request) const
        {
            return SubmitCallable(&GlueDataBrewClient::UntagResource, request);
        }
        /**
         * An Async wrapper for UntagResource that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void UntagResourceAsync(const UntagResourceRequestT& request, const UntagResourceResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&GlueDataBrewClient::UntagResource, request, handler, context);
        }
        /**
         * Modifies the definition of an existing DataBrew dataset.
See
         * Also:
   AWS
         * API Reference
         */
        virtual Model::UpdateDatasetOutcome UpdateDataset(const Model::UpdateDatasetRequest& request) const;
        /**
         * A Callable wrapper for UpdateDataset that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::UpdateDatasetOutcomeCallable UpdateDatasetCallable(const UpdateDatasetRequestT& request) const
        {
            return SubmitCallable(&GlueDataBrewClient::UpdateDataset, request);
        }
        /**
         * An Async wrapper for UpdateDataset that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void UpdateDatasetAsync(const UpdateDatasetRequestT& request, const UpdateDatasetResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&GlueDataBrewClient::UpdateDataset, request, handler, context);
        }
        /**
         * Modifies the definition of an existing profile job.
See Also:
 
         * AWS
         * API Reference
         */
        virtual Model::UpdateProfileJobOutcome UpdateProfileJob(const Model::UpdateProfileJobRequest& request) const;
        /**
         * A Callable wrapper for UpdateProfileJob that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::UpdateProfileJobOutcomeCallable UpdateProfileJobCallable(const UpdateProfileJobRequestT& request) const
        {
            return SubmitCallable(&GlueDataBrewClient::UpdateProfileJob, request);
        }
        /**
         * An Async wrapper for UpdateProfileJob that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void UpdateProfileJobAsync(const UpdateProfileJobRequestT& request, const UpdateProfileJobResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&GlueDataBrewClient::UpdateProfileJob, request, handler, context);
        }
        /**
         * Modifies the definition of an existing DataBrew project.
See
         * Also:
   AWS
         * API Reference
         */
        virtual Model::UpdateProjectOutcome UpdateProject(const Model::UpdateProjectRequest& request) const;
        /**
         * A Callable wrapper for UpdateProject that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::UpdateProjectOutcomeCallable UpdateProjectCallable(const UpdateProjectRequestT& request) const
        {
            return SubmitCallable(&GlueDataBrewClient::UpdateProject, request);
        }
        /**
         * An Async wrapper for UpdateProject that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void UpdateProjectAsync(const UpdateProjectRequestT& request, const UpdateProjectResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&GlueDataBrewClient::UpdateProject, request, handler, context);
        }
        /**
         * Modifies the definition of the LATEST_WORKING version of a
         * DataBrew recipe.
See Also:
   AWS
         * API Reference
         */
        virtual Model::UpdateRecipeOutcome UpdateRecipe(const Model::UpdateRecipeRequest& request) const;
        /**
         * A Callable wrapper for UpdateRecipe that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::UpdateRecipeOutcomeCallable UpdateRecipeCallable(const UpdateRecipeRequestT& request) const
        {
            return SubmitCallable(&GlueDataBrewClient::UpdateRecipe, request);
        }
        /**
         * An Async wrapper for UpdateRecipe that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void UpdateRecipeAsync(const UpdateRecipeRequestT& request, const UpdateRecipeResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&GlueDataBrewClient::UpdateRecipe, request, handler, context);
        }
        /**
         * Modifies the definition of an existing DataBrew recipe job.
See
         * Also:
   AWS
         * API Reference
         */
        virtual Model::UpdateRecipeJobOutcome UpdateRecipeJob(const Model::UpdateRecipeJobRequest& request) const;
        /**
         * A Callable wrapper for UpdateRecipeJob that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::UpdateRecipeJobOutcomeCallable UpdateRecipeJobCallable(const UpdateRecipeJobRequestT& request) const
        {
            return SubmitCallable(&GlueDataBrewClient::UpdateRecipeJob, request);
        }
        /**
         * An Async wrapper for UpdateRecipeJob that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void UpdateRecipeJobAsync(const UpdateRecipeJobRequestT& request, const UpdateRecipeJobResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&GlueDataBrewClient::UpdateRecipeJob, request, handler, context);
        }
        /**
         * Updates specified ruleset.
See Also:
   AWS
         * API Reference
         */
        virtual Model::UpdateRulesetOutcome UpdateRuleset(const Model::UpdateRulesetRequest& request) const;
        /**
         * A Callable wrapper for UpdateRuleset that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::UpdateRulesetOutcomeCallable UpdateRulesetCallable(const UpdateRulesetRequestT& request) const
        {
            return SubmitCallable(&GlueDataBrewClient::UpdateRuleset, request);
        }
        /**
         * An Async wrapper for UpdateRuleset that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void UpdateRulesetAsync(const UpdateRulesetRequestT& request, const UpdateRulesetResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&GlueDataBrewClient::UpdateRuleset, request, handler, context);
        }
        /**
         * Modifies the definition of an existing DataBrew schedule.
See
         * Also:
   AWS
         * API Reference
         */
        virtual Model::UpdateScheduleOutcome UpdateSchedule(const Model::UpdateScheduleRequest& request) const;
        /**
         * A Callable wrapper for UpdateSchedule that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::UpdateScheduleOutcomeCallable UpdateScheduleCallable(const UpdateScheduleRequestT& request) const
        {
            return SubmitCallable(&GlueDataBrewClient::UpdateSchedule, request);
        }
        /**
         * An Async wrapper for UpdateSchedule that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void UpdateScheduleAsync(const UpdateScheduleRequestT& request, const UpdateScheduleResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&GlueDataBrewClient::UpdateSchedule, request, handler, context);
        }
      void OverrideEndpoint(const Aws::String& endpoint);
      std::shared_ptr& accessEndpointProvider();
    private:
      friend class Aws::Client::ClientWithAsyncTemplateMethods;
      void init(const GlueDataBrewClientConfiguration& clientConfiguration);
      GlueDataBrewClientConfiguration m_clientConfiguration;
      std::shared_ptr m_executor;
      std::shared_ptr m_endpointProvider;
  };
} // namespace GlueDataBrew
} // namespace Aws