/**
 * 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 OpenSearchServerless
{
  /**
   * Use the Amazon OpenSearch Serverless API to create, configure, and manage
   * OpenSearch Serverless collections and security policies.
 OpenSearch
   * Serverless is an on-demand, pre-provisioned serverless configuration for Amazon
   * OpenSearch Service. OpenSearch Serverless removes the operational complexities
   * of provisioning, configuring, and tuning your OpenSearch clusters. It enables
   * you to easily search and analyze petabytes of data without having to worry about
   * the underlying infrastructure and data management.
  To learn more about
   * OpenSearch Serverless, see What
   * is Amazon OpenSearch Serverless? 
   */
  class AWS_OPENSEARCHSERVERLESS_API OpenSearchServerlessClient : 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 OpenSearchServerlessClientConfiguration ClientConfigurationType;
      typedef OpenSearchServerlessEndpointProvider 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.
        */
        OpenSearchServerlessClient(const Aws::OpenSearchServerless::OpenSearchServerlessClientConfiguration& clientConfiguration = Aws::OpenSearchServerless::OpenSearchServerlessClientConfiguration(),
                                   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.
        */
        OpenSearchServerlessClient(const Aws::Auth::AWSCredentials& credentials,
                                   std::shared_ptr endpointProvider = Aws::MakeShared(ALLOCATION_TAG),
                                   const Aws::OpenSearchServerless::OpenSearchServerlessClientConfiguration& clientConfiguration = Aws::OpenSearchServerless::OpenSearchServerlessClientConfiguration());
       /**
        * 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
        */
        OpenSearchServerlessClient(const std::shared_ptr& credentialsProvider,
                                   std::shared_ptr endpointProvider = Aws::MakeShared(ALLOCATION_TAG),
                                   const Aws::OpenSearchServerless::OpenSearchServerlessClientConfiguration& clientConfiguration = Aws::OpenSearchServerless::OpenSearchServerlessClientConfiguration());
        /* 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.
        */
        OpenSearchServerlessClient(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.
        */
        OpenSearchServerlessClient(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
        */
        OpenSearchServerlessClient(const std::shared_ptr& credentialsProvider,
                                   const Aws::Client::ClientConfiguration& clientConfiguration);
        /* End of legacy constructors due deprecation */
        virtual ~OpenSearchServerlessClient();
        /**
         * Returns attributes for one or more collections, including the collection
         * endpoint and the OpenSearch Dashboards endpoint. For more information, see Creating
         * and managing Amazon OpenSearch Serverless collections.
See
         * Also:
   AWS
         * API Reference
         */
        virtual Model::BatchGetCollectionOutcome BatchGetCollection(const Model::BatchGetCollectionRequest& request) const;
        /**
         * A Callable wrapper for BatchGetCollection that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::BatchGetCollectionOutcomeCallable BatchGetCollectionCallable(const BatchGetCollectionRequestT& request) const
        {
            return SubmitCallable(&OpenSearchServerlessClient::BatchGetCollection, request);
        }
        /**
         * An Async wrapper for BatchGetCollection that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void BatchGetCollectionAsync(const BatchGetCollectionRequestT& request, const BatchGetCollectionResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&OpenSearchServerlessClient::BatchGetCollection, request, handler, context);
        }
        /**
         * Returns attributes for one or more VPC endpoints associated with the current
         * account. For more information, see Access
         * Amazon OpenSearch Serverless using an interface endpoint.
See
         * Also:
   AWS
         * API Reference
         */
        virtual Model::BatchGetVpcEndpointOutcome BatchGetVpcEndpoint(const Model::BatchGetVpcEndpointRequest& request) const;
        /**
         * A Callable wrapper for BatchGetVpcEndpoint that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::BatchGetVpcEndpointOutcomeCallable BatchGetVpcEndpointCallable(const BatchGetVpcEndpointRequestT& request) const
        {
            return SubmitCallable(&OpenSearchServerlessClient::BatchGetVpcEndpoint, request);
        }
        /**
         * An Async wrapper for BatchGetVpcEndpoint that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void BatchGetVpcEndpointAsync(const BatchGetVpcEndpointRequestT& request, const BatchGetVpcEndpointResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&OpenSearchServerlessClient::BatchGetVpcEndpoint, request, handler, context);
        }
        /**
         * Creates a data access policy for OpenSearch Serverless. Access policies limit
         * access to collections and the resources within them, and allow a user to access
         * that data irrespective of the access mechanism or network source. For more
         * information, see Data
         * access control for Amazon OpenSearch Serverless.
See Also:
  
         * AWS
         * API Reference
         */
        virtual Model::CreateAccessPolicyOutcome CreateAccessPolicy(const Model::CreateAccessPolicyRequest& request) const;
        /**
         * A Callable wrapper for CreateAccessPolicy that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::CreateAccessPolicyOutcomeCallable CreateAccessPolicyCallable(const CreateAccessPolicyRequestT& request) const
        {
            return SubmitCallable(&OpenSearchServerlessClient::CreateAccessPolicy, request);
        }
        /**
         * An Async wrapper for CreateAccessPolicy that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void CreateAccessPolicyAsync(const CreateAccessPolicyRequestT& request, const CreateAccessPolicyResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&OpenSearchServerlessClient::CreateAccessPolicy, request, handler, context);
        }
        /**
         * Creates a new OpenSearch Serverless collection. For more information, see Creating
         * and managing Amazon OpenSearch Serverless collections.
See
         * Also:
   AWS
         * API Reference
         */
        virtual Model::CreateCollectionOutcome CreateCollection(const Model::CreateCollectionRequest& request) const;
        /**
         * A Callable wrapper for CreateCollection that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::CreateCollectionOutcomeCallable CreateCollectionCallable(const CreateCollectionRequestT& request) const
        {
            return SubmitCallable(&OpenSearchServerlessClient::CreateCollection, request);
        }
        /**
         * An Async wrapper for CreateCollection that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void CreateCollectionAsync(const CreateCollectionRequestT& request, const CreateCollectionResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&OpenSearchServerlessClient::CreateCollection, request, handler, context);
        }
        /**
         * Specifies a security configuration for OpenSearch Serverless. For more
         * information, see SAML
         * authentication for Amazon OpenSearch Serverless. 
See Also:
  
         * AWS
         * API Reference
         */
        virtual Model::CreateSecurityConfigOutcome CreateSecurityConfig(const Model::CreateSecurityConfigRequest& request) const;
        /**
         * A Callable wrapper for CreateSecurityConfig that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::CreateSecurityConfigOutcomeCallable CreateSecurityConfigCallable(const CreateSecurityConfigRequestT& request) const
        {
            return SubmitCallable(&OpenSearchServerlessClient::CreateSecurityConfig, request);
        }
        /**
         * An Async wrapper for CreateSecurityConfig that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void CreateSecurityConfigAsync(const CreateSecurityConfigRequestT& request, const CreateSecurityConfigResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&OpenSearchServerlessClient::CreateSecurityConfig, request, handler, context);
        }
        /**
         * Creates a security policy to be used by one or more OpenSearch Serverless
         * collections. Security policies provide access to a collection and its OpenSearch
         * Dashboards endpoint from public networks or specific VPC endpoints. They also
         * allow you to secure a collection with a KMS encryption key. For more
         * information, see Network
         * access for Amazon OpenSearch Serverless and Encryption
         * at rest for Amazon OpenSearch Serverless.
See Also:
   AWS
         * API Reference
         */
        virtual Model::CreateSecurityPolicyOutcome CreateSecurityPolicy(const Model::CreateSecurityPolicyRequest& request) const;
        /**
         * A Callable wrapper for CreateSecurityPolicy that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::CreateSecurityPolicyOutcomeCallable CreateSecurityPolicyCallable(const CreateSecurityPolicyRequestT& request) const
        {
            return SubmitCallable(&OpenSearchServerlessClient::CreateSecurityPolicy, request);
        }
        /**
         * An Async wrapper for CreateSecurityPolicy that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void CreateSecurityPolicyAsync(const CreateSecurityPolicyRequestT& request, const CreateSecurityPolicyResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&OpenSearchServerlessClient::CreateSecurityPolicy, request, handler, context);
        }
        /**
         * Creates an OpenSearch Serverless-managed interface VPC endpoint. For more
         * information, see Access
         * Amazon OpenSearch Serverless using an interface endpoint.
See
         * Also:
   AWS
         * API Reference
         */
        virtual Model::CreateVpcEndpointOutcome CreateVpcEndpoint(const Model::CreateVpcEndpointRequest& request) const;
        /**
         * A Callable wrapper for CreateVpcEndpoint that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::CreateVpcEndpointOutcomeCallable CreateVpcEndpointCallable(const CreateVpcEndpointRequestT& request) const
        {
            return SubmitCallable(&OpenSearchServerlessClient::CreateVpcEndpoint, request);
        }
        /**
         * An Async wrapper for CreateVpcEndpoint that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void CreateVpcEndpointAsync(const CreateVpcEndpointRequestT& request, const CreateVpcEndpointResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&OpenSearchServerlessClient::CreateVpcEndpoint, request, handler, context);
        }
        /**
         * Deletes an OpenSearch Serverless access policy. For more information, see Data
         * access control for Amazon OpenSearch Serverless.
See Also:
  
         * AWS
         * API Reference
         */
        virtual Model::DeleteAccessPolicyOutcome DeleteAccessPolicy(const Model::DeleteAccessPolicyRequest& request) const;
        /**
         * A Callable wrapper for DeleteAccessPolicy that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::DeleteAccessPolicyOutcomeCallable DeleteAccessPolicyCallable(const DeleteAccessPolicyRequestT& request) const
        {
            return SubmitCallable(&OpenSearchServerlessClient::DeleteAccessPolicy, request);
        }
        /**
         * An Async wrapper for DeleteAccessPolicy that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void DeleteAccessPolicyAsync(const DeleteAccessPolicyRequestT& request, const DeleteAccessPolicyResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&OpenSearchServerlessClient::DeleteAccessPolicy, request, handler, context);
        }
        /**
         * Deletes an OpenSearch Serverless collection. For more information, see Creating
         * and managing Amazon OpenSearch Serverless collections.
See
         * Also:
   AWS
         * API Reference
         */
        virtual Model::DeleteCollectionOutcome DeleteCollection(const Model::DeleteCollectionRequest& request) const;
        /**
         * A Callable wrapper for DeleteCollection that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::DeleteCollectionOutcomeCallable DeleteCollectionCallable(const DeleteCollectionRequestT& request) const
        {
            return SubmitCallable(&OpenSearchServerlessClient::DeleteCollection, request);
        }
        /**
         * An Async wrapper for DeleteCollection that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void DeleteCollectionAsync(const DeleteCollectionRequestT& request, const DeleteCollectionResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&OpenSearchServerlessClient::DeleteCollection, request, handler, context);
        }
        /**
         * Deletes a security configuration for OpenSearch Serverless. For more
         * information, see SAML
         * authentication for Amazon OpenSearch Serverless.
See Also:
  
         * AWS
         * API Reference
         */
        virtual Model::DeleteSecurityConfigOutcome DeleteSecurityConfig(const Model::DeleteSecurityConfigRequest& request) const;
        /**
         * A Callable wrapper for DeleteSecurityConfig that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::DeleteSecurityConfigOutcomeCallable DeleteSecurityConfigCallable(const DeleteSecurityConfigRequestT& request) const
        {
            return SubmitCallable(&OpenSearchServerlessClient::DeleteSecurityConfig, request);
        }
        /**
         * An Async wrapper for DeleteSecurityConfig that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void DeleteSecurityConfigAsync(const DeleteSecurityConfigRequestT& request, const DeleteSecurityConfigResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&OpenSearchServerlessClient::DeleteSecurityConfig, request, handler, context);
        }
        /**
         * Deletes an OpenSearch Serverless security policy.
See Also:
  
         * AWS
         * API Reference
         */
        virtual Model::DeleteSecurityPolicyOutcome DeleteSecurityPolicy(const Model::DeleteSecurityPolicyRequest& request) const;
        /**
         * A Callable wrapper for DeleteSecurityPolicy that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::DeleteSecurityPolicyOutcomeCallable DeleteSecurityPolicyCallable(const DeleteSecurityPolicyRequestT& request) const
        {
            return SubmitCallable(&OpenSearchServerlessClient::DeleteSecurityPolicy, request);
        }
        /**
         * An Async wrapper for DeleteSecurityPolicy that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void DeleteSecurityPolicyAsync(const DeleteSecurityPolicyRequestT& request, const DeleteSecurityPolicyResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&OpenSearchServerlessClient::DeleteSecurityPolicy, request, handler, context);
        }
        /**
         * Deletes an OpenSearch Serverless-managed interface endpoint. For more
         * information, see Access
         * Amazon OpenSearch Serverless using an interface endpoint.
See
         * Also:
   AWS
         * API Reference
         */
        virtual Model::DeleteVpcEndpointOutcome DeleteVpcEndpoint(const Model::DeleteVpcEndpointRequest& request) const;
        /**
         * A Callable wrapper for DeleteVpcEndpoint that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::DeleteVpcEndpointOutcomeCallable DeleteVpcEndpointCallable(const DeleteVpcEndpointRequestT& request) const
        {
            return SubmitCallable(&OpenSearchServerlessClient::DeleteVpcEndpoint, request);
        }
        /**
         * An Async wrapper for DeleteVpcEndpoint that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void DeleteVpcEndpointAsync(const DeleteVpcEndpointRequestT& request, const DeleteVpcEndpointResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&OpenSearchServerlessClient::DeleteVpcEndpoint, request, handler, context);
        }
        /**
         * Returns an OpenSearch Serverless access policy. For more information, see Data
         * access control for Amazon OpenSearch Serverless.
See Also:
  
         * AWS
         * API Reference
         */
        virtual Model::GetAccessPolicyOutcome GetAccessPolicy(const Model::GetAccessPolicyRequest& request) const;
        /**
         * A Callable wrapper for GetAccessPolicy that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::GetAccessPolicyOutcomeCallable GetAccessPolicyCallable(const GetAccessPolicyRequestT& request) const
        {
            return SubmitCallable(&OpenSearchServerlessClient::GetAccessPolicy, request);
        }
        /**
         * An Async wrapper for GetAccessPolicy that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void GetAccessPolicyAsync(const GetAccessPolicyRequestT& request, const GetAccessPolicyResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&OpenSearchServerlessClient::GetAccessPolicy, request, handler, context);
        }
        /**
         * Returns account-level settings related to OpenSearch
         * Serverless.
See Also:
   AWS
         * API Reference
         */
        virtual Model::GetAccountSettingsOutcome GetAccountSettings(const Model::GetAccountSettingsRequest& request) const;
        /**
         * A Callable wrapper for GetAccountSettings that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::GetAccountSettingsOutcomeCallable GetAccountSettingsCallable(const GetAccountSettingsRequestT& request) const
        {
            return SubmitCallable(&OpenSearchServerlessClient::GetAccountSettings, request);
        }
        /**
         * An Async wrapper for GetAccountSettings that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void GetAccountSettingsAsync(const GetAccountSettingsRequestT& request, const GetAccountSettingsResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&OpenSearchServerlessClient::GetAccountSettings, request, handler, context);
        }
        /**
         * Returns statistical information about your OpenSearch Serverless access
         * policies, security configurations, and security policies.
See
         * Also:
   AWS
         * API Reference
         */
        virtual Model::GetPoliciesStatsOutcome GetPoliciesStats(const Model::GetPoliciesStatsRequest& request) const;
        /**
         * A Callable wrapper for GetPoliciesStats that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::GetPoliciesStatsOutcomeCallable GetPoliciesStatsCallable(const GetPoliciesStatsRequestT& request) const
        {
            return SubmitCallable(&OpenSearchServerlessClient::GetPoliciesStats, request);
        }
        /**
         * An Async wrapper for GetPoliciesStats that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void GetPoliciesStatsAsync(const GetPoliciesStatsRequestT& request, const GetPoliciesStatsResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&OpenSearchServerlessClient::GetPoliciesStats, request, handler, context);
        }
        /**
         * Returns information about an OpenSearch Serverless security configuration.
         * For more information, see SAML
         * authentication for Amazon OpenSearch Serverless.
See Also:
  
         * AWS
         * API Reference
         */
        virtual Model::GetSecurityConfigOutcome GetSecurityConfig(const Model::GetSecurityConfigRequest& request) const;
        /**
         * A Callable wrapper for GetSecurityConfig that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::GetSecurityConfigOutcomeCallable GetSecurityConfigCallable(const GetSecurityConfigRequestT& request) const
        {
            return SubmitCallable(&OpenSearchServerlessClient::GetSecurityConfig, request);
        }
        /**
         * An Async wrapper for GetSecurityConfig that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void GetSecurityConfigAsync(const GetSecurityConfigRequestT& request, const GetSecurityConfigResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&OpenSearchServerlessClient::GetSecurityConfig, request, handler, context);
        }
        /**
         * Returns information about a configured OpenSearch Serverless security policy.
         * For more information, see Network
         * access for Amazon OpenSearch Serverless and Encryption
         * at rest for Amazon OpenSearch Serverless.
See Also:
   AWS
         * API Reference
         */
        virtual Model::GetSecurityPolicyOutcome GetSecurityPolicy(const Model::GetSecurityPolicyRequest& request) const;
        /**
         * A Callable wrapper for GetSecurityPolicy that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::GetSecurityPolicyOutcomeCallable GetSecurityPolicyCallable(const GetSecurityPolicyRequestT& request) const
        {
            return SubmitCallable(&OpenSearchServerlessClient::GetSecurityPolicy, request);
        }
        /**
         * An Async wrapper for GetSecurityPolicy that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void GetSecurityPolicyAsync(const GetSecurityPolicyRequestT& request, const GetSecurityPolicyResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&OpenSearchServerlessClient::GetSecurityPolicy, request, handler, context);
        }
        /**
         * Returns information about a list of OpenSearch Serverless access
         * policies.
See Also:
   AWS
         * API Reference
         */
        virtual Model::ListAccessPoliciesOutcome ListAccessPolicies(const Model::ListAccessPoliciesRequest& request) const;
        /**
         * A Callable wrapper for ListAccessPolicies that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::ListAccessPoliciesOutcomeCallable ListAccessPoliciesCallable(const ListAccessPoliciesRequestT& request) const
        {
            return SubmitCallable(&OpenSearchServerlessClient::ListAccessPolicies, request);
        }
        /**
         * An Async wrapper for ListAccessPolicies that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void ListAccessPoliciesAsync(const ListAccessPoliciesRequestT& request, const ListAccessPoliciesResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&OpenSearchServerlessClient::ListAccessPolicies, request, handler, context);
        }
        /**
         * Lists all OpenSearch Serverless collections. For more information, see Creating
         * and managing Amazon OpenSearch Serverless collections.
  Make
         * sure to include an empty request body {} if you don't include any collection
         * filters in the request.
 See Also:
   AWS
         * API Reference
         */
        virtual Model::ListCollectionsOutcome ListCollections(const Model::ListCollectionsRequest& request) const;
        /**
         * A Callable wrapper for ListCollections that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::ListCollectionsOutcomeCallable ListCollectionsCallable(const ListCollectionsRequestT& request) const
        {
            return SubmitCallable(&OpenSearchServerlessClient::ListCollections, request);
        }
        /**
         * An Async wrapper for ListCollections that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void ListCollectionsAsync(const ListCollectionsRequestT& request, const ListCollectionsResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&OpenSearchServerlessClient::ListCollections, request, handler, context);
        }
        /**
         * Returns information about configured OpenSearch Serverless security
         * configurations. For more information, see SAML
         * authentication for Amazon OpenSearch Serverless.
See Also:
  
         * AWS
         * API Reference
         */
        virtual Model::ListSecurityConfigsOutcome ListSecurityConfigs(const Model::ListSecurityConfigsRequest& request) const;
        /**
         * A Callable wrapper for ListSecurityConfigs that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::ListSecurityConfigsOutcomeCallable ListSecurityConfigsCallable(const ListSecurityConfigsRequestT& request) const
        {
            return SubmitCallable(&OpenSearchServerlessClient::ListSecurityConfigs, request);
        }
        /**
         * An Async wrapper for ListSecurityConfigs that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void ListSecurityConfigsAsync(const ListSecurityConfigsRequestT& request, const ListSecurityConfigsResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&OpenSearchServerlessClient::ListSecurityConfigs, request, handler, context);
        }
        /**
         * Returns information about configured OpenSearch Serverless security
         * policies.
See Also:
   AWS
         * API Reference
         */
        virtual Model::ListSecurityPoliciesOutcome ListSecurityPolicies(const Model::ListSecurityPoliciesRequest& request) const;
        /**
         * A Callable wrapper for ListSecurityPolicies that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::ListSecurityPoliciesOutcomeCallable ListSecurityPoliciesCallable(const ListSecurityPoliciesRequestT& request) const
        {
            return SubmitCallable(&OpenSearchServerlessClient::ListSecurityPolicies, request);
        }
        /**
         * An Async wrapper for ListSecurityPolicies that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void ListSecurityPoliciesAsync(const ListSecurityPoliciesRequestT& request, const ListSecurityPoliciesResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&OpenSearchServerlessClient::ListSecurityPolicies, request, handler, context);
        }
        /**
         * Returns the tags for an OpenSearch Serverless resource. For more information,
         * see Tagging
         * Amazon OpenSearch Serverless collections.
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(&OpenSearchServerlessClient::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(&OpenSearchServerlessClient::ListTagsForResource, request, handler, context);
        }
        /**
         * Returns the OpenSearch Serverless-managed interface VPC endpoints associated
         * with the current account. For more information, see Access
         * Amazon OpenSearch Serverless using an interface endpoint.
See
         * Also:
   AWS
         * API Reference
         */
        virtual Model::ListVpcEndpointsOutcome ListVpcEndpoints(const Model::ListVpcEndpointsRequest& request) const;
        /**
         * A Callable wrapper for ListVpcEndpoints that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::ListVpcEndpointsOutcomeCallable ListVpcEndpointsCallable(const ListVpcEndpointsRequestT& request) const
        {
            return SubmitCallable(&OpenSearchServerlessClient::ListVpcEndpoints, request);
        }
        /**
         * An Async wrapper for ListVpcEndpoints that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void ListVpcEndpointsAsync(const ListVpcEndpointsRequestT& request, const ListVpcEndpointsResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&OpenSearchServerlessClient::ListVpcEndpoints, request, handler, context);
        }
        /**
         * Associates tags with an OpenSearch Serverless resource. For more information,
         * see Tagging
         * Amazon OpenSearch Serverless collections.
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(&OpenSearchServerlessClient::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(&OpenSearchServerlessClient::TagResource, request, handler, context);
        }
        /**
         * Removes a tag or set of tags from an OpenSearch Serverless resource. For more
         * information, see Tagging
         * Amazon OpenSearch Serverless collections.
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(&OpenSearchServerlessClient::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(&OpenSearchServerlessClient::UntagResource, request, handler, context);
        }
        /**
         * Updates an OpenSearch Serverless access policy. For more information, see Data
         * access control for Amazon OpenSearch Serverless.
See Also:
  
         * AWS
         * API Reference
         */
        virtual Model::UpdateAccessPolicyOutcome UpdateAccessPolicy(const Model::UpdateAccessPolicyRequest& request) const;
        /**
         * A Callable wrapper for UpdateAccessPolicy that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::UpdateAccessPolicyOutcomeCallable UpdateAccessPolicyCallable(const UpdateAccessPolicyRequestT& request) const
        {
            return SubmitCallable(&OpenSearchServerlessClient::UpdateAccessPolicy, request);
        }
        /**
         * An Async wrapper for UpdateAccessPolicy that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void UpdateAccessPolicyAsync(const UpdateAccessPolicyRequestT& request, const UpdateAccessPolicyResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&OpenSearchServerlessClient::UpdateAccessPolicy, request, handler, context);
        }
        /**
         * Update the OpenSearch Serverless settings for the current Amazon Web Services
         * account. For more information, see Managing
         * capacity limits for Amazon OpenSearch Serverless.
See Also:
  
         * AWS
         * API Reference
         */
        virtual Model::UpdateAccountSettingsOutcome UpdateAccountSettings(const Model::UpdateAccountSettingsRequest& request) const;
        /**
         * A Callable wrapper for UpdateAccountSettings that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::UpdateAccountSettingsOutcomeCallable UpdateAccountSettingsCallable(const UpdateAccountSettingsRequestT& request) const
        {
            return SubmitCallable(&OpenSearchServerlessClient::UpdateAccountSettings, request);
        }
        /**
         * An Async wrapper for UpdateAccountSettings that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void UpdateAccountSettingsAsync(const UpdateAccountSettingsRequestT& request, const UpdateAccountSettingsResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&OpenSearchServerlessClient::UpdateAccountSettings, request, handler, context);
        }
        /**
         * Updates an OpenSearch Serverless collection.
See Also:
   AWS
         * API Reference
         */
        virtual Model::UpdateCollectionOutcome UpdateCollection(const Model::UpdateCollectionRequest& request) const;
        /**
         * A Callable wrapper for UpdateCollection that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::UpdateCollectionOutcomeCallable UpdateCollectionCallable(const UpdateCollectionRequestT& request) const
        {
            return SubmitCallable(&OpenSearchServerlessClient::UpdateCollection, request);
        }
        /**
         * An Async wrapper for UpdateCollection that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void UpdateCollectionAsync(const UpdateCollectionRequestT& request, const UpdateCollectionResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&OpenSearchServerlessClient::UpdateCollection, request, handler, context);
        }
        /**
         * Updates a security configuration for OpenSearch Serverless. For more
         * information, see SAML
         * authentication for Amazon OpenSearch Serverless.
See Also:
  
         * AWS
         * API Reference
         */
        virtual Model::UpdateSecurityConfigOutcome UpdateSecurityConfig(const Model::UpdateSecurityConfigRequest& request) const;
        /**
         * A Callable wrapper for UpdateSecurityConfig that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::UpdateSecurityConfigOutcomeCallable UpdateSecurityConfigCallable(const UpdateSecurityConfigRequestT& request) const
        {
            return SubmitCallable(&OpenSearchServerlessClient::UpdateSecurityConfig, request);
        }
        /**
         * An Async wrapper for UpdateSecurityConfig that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void UpdateSecurityConfigAsync(const UpdateSecurityConfigRequestT& request, const UpdateSecurityConfigResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&OpenSearchServerlessClient::UpdateSecurityConfig, request, handler, context);
        }
        /**
         * Updates an OpenSearch Serverless security policy. For more information, see
         * Network
         * access for Amazon OpenSearch Serverless and Encryption
         * at rest for Amazon OpenSearch Serverless.
See Also:
   AWS
         * API Reference
         */
        virtual Model::UpdateSecurityPolicyOutcome UpdateSecurityPolicy(const Model::UpdateSecurityPolicyRequest& request) const;
        /**
         * A Callable wrapper for UpdateSecurityPolicy that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::UpdateSecurityPolicyOutcomeCallable UpdateSecurityPolicyCallable(const UpdateSecurityPolicyRequestT& request) const
        {
            return SubmitCallable(&OpenSearchServerlessClient::UpdateSecurityPolicy, request);
        }
        /**
         * An Async wrapper for UpdateSecurityPolicy that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void UpdateSecurityPolicyAsync(const UpdateSecurityPolicyRequestT& request, const UpdateSecurityPolicyResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&OpenSearchServerlessClient::UpdateSecurityPolicy, request, handler, context);
        }
        /**
         * Updates an OpenSearch Serverless-managed interface endpoint. For more
         * information, see Access
         * Amazon OpenSearch Serverless using an interface endpoint.
See
         * Also:
   AWS
         * API Reference
         */
        virtual Model::UpdateVpcEndpointOutcome UpdateVpcEndpoint(const Model::UpdateVpcEndpointRequest& request) const;
        /**
         * A Callable wrapper for UpdateVpcEndpoint that returns a future to the operation so that it can be executed in parallel to other requests.
         */
        template
        Model::UpdateVpcEndpointOutcomeCallable UpdateVpcEndpointCallable(const UpdateVpcEndpointRequestT& request) const
        {
            return SubmitCallable(&OpenSearchServerlessClient::UpdateVpcEndpoint, request);
        }
        /**
         * An Async wrapper for UpdateVpcEndpoint that queues the request into a thread executor and triggers associated callback when operation has finished.
         */
        template
        void UpdateVpcEndpointAsync(const UpdateVpcEndpointRequestT& request, const UpdateVpcEndpointResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
        {
            return SubmitAsync(&OpenSearchServerlessClient::UpdateVpcEndpoint, request, handler, context);
        }
      void OverrideEndpoint(const Aws::String& endpoint);
      std::shared_ptr& accessEndpointProvider();
    private:
      friend class Aws::Client::ClientWithAsyncTemplateMethods;
      void init(const OpenSearchServerlessClientConfiguration& clientConfiguration);
      OpenSearchServerlessClientConfiguration m_clientConfiguration;
      std::shared_ptr m_executor;
      std::shared_ptr m_endpointProvider;
  };
} // namespace OpenSearchServerless
} // namespace Aws