text: ﻿/*
  * Copyright 2010-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License").
  * You may not use this file except in compliance with the License.
  * A copy of the License is located at
  *
  *  http://aws.amazon.com/apache2.0
  *
  * or in the "license" file accompanying this file. This file is distributed
  * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
  * express or implied. See the License for the specific language governing
  * permissions and limitations under the License.
  */
  
  #pragma once
  #include <aws/chime/Chime_EXPORTS.h>
  #include <aws/chime/ChimeErrors.h>
  #include <aws/core/client/AWSError.h>
  #include <aws/core/client/ClientConfiguration.h>
  #include <aws/core/client/AWSClient.h>
  #include <aws/core/utils/memory/stl/AWSString.h>
  #include <aws/core/utils/json/JsonSerializer.h>
  #include <aws/chime/model/BatchSuspendUserResult.h>
  #include <aws/chime/model/BatchUnsuspendUserResult.h>
  #include <aws/chime/model/BatchUpdateUserResult.h>
  #include <aws/chime/model/CreateAccountResult.h>
  #include <aws/chime/model/DeleteAccountResult.h>
  #include <aws/chime/model/GetAccountResult.h>
  #include <aws/chime/model/GetAccountSettingsResult.h>
  #include <aws/chime/model/GetUserResult.h>
  #include <aws/chime/model/InviteUsersResult.h>
  #include <aws/chime/model/ListAccountsResult.h>
  #include <aws/chime/model/ListUsersResult.h>
  #include <aws/chime/model/LogoutUserResult.h>
  #include <aws/chime/model/ResetPersonalPINResult.h>
  #include <aws/chime/model/UpdateAccountResult.h>
  #include <aws/chime/model/UpdateAccountSettingsResult.h>
  #include <aws/chime/model/UpdateUserResult.h>
  #include <aws/core/client/AsyncCallerContext.h>
  #include <aws/core/http/HttpTypes.h>
  #include <future>
  #include <functional>
  
  namespace Aws
  {
  
  namespace Http
  {
    class HttpClient;
    class HttpClientFactory;
  } // namespace Http
  
  namespace Utils
  {
    template< typename R, typename E> class Outcome;
  
  namespace Threading
  {
    class Executor;
  } // namespace Threading
  } // namespace Utils
  
  namespace Auth
  {
    class AWSCredentials;
    class AWSCredentialsProvider;
  } // namespace Auth
  
  namespace Client
  {
    class RetryStrategy;
  } // namespace Client
  
  namespace Chime
  {
  
  namespace Model
  {
          class BatchSuspendUserRequest;
          class BatchUnsuspendUserRequest;
          class BatchUpdateUserRequest;
          class CreateAccountRequest;
          class DeleteAccountRequest;
          class GetAccountRequest;
          class GetAccountSettingsRequest;
          class GetUserRequest;
          class InviteUsersRequest;
          class ListAccountsRequest;
          class ListUsersRequest;
          class LogoutUserRequest;
          class ResetPersonalPINRequest;
          class UpdateAccountRequest;
          class UpdateAccountSettingsRequest;
          class UpdateUserRequest;
  
          typedef Aws::Utils::Outcome<BatchSuspendUserResult, Aws::Client::AWSError<ChimeErrors>> BatchSuspendUserOutcome;
          typedef Aws::Utils::Outcome<BatchUnsuspendUserResult, Aws::Client::AWSError<ChimeErrors>> BatchUnsuspendUserOutcome;
          typedef Aws::Utils::Outcome<BatchUpdateUserResult, Aws::Client::AWSError<ChimeErrors>> BatchUpdateUserOutcome;
          typedef Aws::Utils::Outcome<CreateAccountResult, Aws::Client::AWSError<ChimeErrors>> CreateAccountOutcome;
          typedef Aws::Utils::Outcome<DeleteAccountResult, Aws::Client::AWSError<ChimeErrors>> DeleteAccountOutcome;
          typedef Aws::Utils::Outcome<GetAccountResult, Aws::Client::AWSError<ChimeErrors>> GetAccountOutcome;
          typedef Aws::Utils::Outcome<GetAccountSettingsResult, Aws::Client::AWSError<ChimeErrors>> GetAccountSettingsOutcome;
          typedef Aws::Utils::Outcome<GetUserResult, Aws::Client::AWSError<ChimeErrors>> GetUserOutcome;
          typedef Aws::Utils::Outcome<InviteUsersResult, Aws::Client::AWSError<ChimeErrors>> InviteUsersOutcome;
          typedef Aws::Utils::Outcome<ListAccountsResult, Aws::Client::AWSError<ChimeErrors>> ListAccountsOutcome;
          typedef Aws::Utils::Outcome<ListUsersResult, Aws::Client::AWSError<ChimeErrors>> ListUsersOutcome;
          typedef Aws::Utils::Outcome<LogoutUserResult, Aws::Client::AWSError<ChimeErrors>> LogoutUserOutcome;
          typedef Aws::Utils::Outcome<ResetPersonalPINResult, Aws::Client::AWSError<ChimeErrors>> ResetPersonalPINOutcome;
          typedef Aws::Utils::Outcome<UpdateAccountResult, Aws::Client::AWSError<ChimeErrors>> UpdateAccountOutcome;
          typedef Aws::Utils::Outcome<UpdateAccountSettingsResult, Aws::Client::AWSError<ChimeErrors>> UpdateAccountSettingsOutcome;
          typedef Aws::Utils::Outcome<UpdateUserResult, Aws::Client::AWSError<ChimeErrors>> UpdateUserOutcome;
  
          typedef std::future<BatchSuspendUserOutcome> BatchSuspendUserOutcomeCallable;
          typedef std::future<BatchUnsuspendUserOutcome> BatchUnsuspendUserOutcomeCallable;
          typedef std::future<BatchUpdateUserOutcome> BatchUpdateUserOutcomeCallable;
          typedef std::future<CreateAccountOutcome> CreateAccountOutcomeCallable;
          typedef std::future<DeleteAccountOutcome> DeleteAccountOutcomeCallable;
          typedef std::future<GetAccountOutcome> GetAccountOutcomeCallable;
          typedef std::future<GetAccountSettingsOutcome> GetAccountSettingsOutcomeCallable;
          typedef std::future<GetUserOutcome> GetUserOutcomeCallable;
          typedef std::future<InviteUsersOutcome> InviteUsersOutcomeCallable;
          typedef std::future<ListAccountsOutcome> ListAccountsOutcomeCallable;
          typedef std::future<ListUsersOutcome> ListUsersOutcomeCallable;
          typedef std::future<LogoutUserOutcome> LogoutUserOutcomeCallable;
          typedef std::future<ResetPersonalPINOutcome> ResetPersonalPINOutcomeCallable;
          typedef std::future<UpdateAccountOutcome> UpdateAccountOutcomeCallable;
          typedef std::future<UpdateAccountSettingsOutcome> UpdateAccountSettingsOutcomeCallable;
          typedef std::future<UpdateUserOutcome> UpdateUserOutcomeCallable;
  } // namespace Model
  
    class ChimeClient;
  
      typedef std::function<void(const ChimeClient*, const Model::BatchSuspendUserRequest&, const Model::BatchSuspendUserOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > BatchSuspendUserResponseReceivedHandler;
      typedef std::function<void(const ChimeClient*, const Model::BatchUnsuspendUserRequest&, const Model::BatchUnsuspendUserOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > BatchUnsuspendUserResponseReceivedHandler;
      typedef std::function<void(const ChimeClient*, const Model::BatchUpdateUserRequest&, const Model::BatchUpdateUserOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > BatchUpdateUserResponseReceivedHandler;
      typedef std::function<void(const ChimeClient*, const Model::CreateAccountRequest&, const Model::CreateAccountOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > CreateAccountResponseReceivedHandler;
      typedef std::function<void(const ChimeClient*, const Model::DeleteAccountRequest&, const Model::DeleteAccountOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > DeleteAccountResponseReceivedHandler;
      typedef std::function<void(const ChimeClient*, const Model::GetAccountRequest&, const Model::GetAccountOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > GetAccountResponseReceivedHandler;
      typedef std::function<void(const ChimeClient*, const Model::GetAccountSettingsRequest&, const Model::GetAccountSettingsOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > GetAccountSettingsResponseReceivedHandler;
      typedef std::function<void(const ChimeClient*, const Model::GetUserRequest&, const Model::GetUserOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > GetUserResponseReceivedHandler;
      typedef std::function<void(const ChimeClient*, const Model::InviteUsersRequest&, const Model::InviteUsersOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > InviteUsersResponseReceivedHandler;
      typedef std::function<void(const ChimeClient*, const Model::ListAccountsRequest&, const Model::ListAccountsOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > ListAccountsResponseReceivedHandler;
      typedef std::function<void(const ChimeClient*, const Model::ListUsersRequest&, const Model::ListUsersOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > ListUsersResponseReceivedHandler;
      typedef std::function<void(const ChimeClient*, const Model::LogoutUserRequest&, const Model::LogoutUserOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > LogoutUserResponseReceivedHandler;
      typedef std::function<void(const ChimeClient*, const Model::ResetPersonalPINRequest&, const Model::ResetPersonalPINOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > ResetPersonalPINResponseReceivedHandler;
      typedef std::function<void(const ChimeClient*, const Model::UpdateAccountRequest&, const Model::UpdateAccountOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > UpdateAccountResponseReceivedHandler;
      typedef std::function<void(const ChimeClient*, const Model::UpdateAccountSettingsRequest&, const Model::UpdateAccountSettingsOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > UpdateAccountSettingsResponseReceivedHandler;
      typedef std::function<void(const ChimeClient*, const Model::UpdateUserRequest&, const Model::UpdateUserOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > UpdateUserResponseReceivedHandler;
  
    /**
     * <p>The Amazon Chime API (application programming interface) is designed for
     * administrators to use to perform key tasks, such as creating and managing Amazon
     * Chime accounts and users. This guide provides detailed information about the
     * Amazon Chime API, including operations, types, inputs and outputs, and error
     * codes.</p> <p>You can use an AWS SDK, the AWS Command Line Interface (AWS CLI),
     * or the REST API to make API calls. We recommend using an AWS SDK or the AWS CLI.
     * Each API operation includes links to information about using it with a
     * language-specific AWS SDK or the AWS CLI.</p> <dl> <dt>Using an AWS SDK</dt>
     * <dd> <p>You don't need to write code to calculate a signature for request
     * authentication. The SDK clients authenticate your requests by using access keys
     * that you provide. For more information about AWS SDKs, see the <a
     * href="http://aws.amazon.com/developer/">AWS Developer Center</a>.</p> </dd>
     * <dt>Using the AWS CLI</dt> <dd> <p>Use your access keys with the AWS CLI to make
     * API calls. For information about setting up the AWS CLI, see <a
     * href="https://docs.aws.amazon.com/cli/latest/userguide/installing.html">Installing
     * the AWS Command Line Interface</a> in the <i>AWS Command Line Interface User
     * Guide</i>. For a list of available Amazon Chime commands, see the <a
     * href="https://docs.aws.amazon.com/cli/latest/reference/chime/index.html">Amazon
     * Chime commands</a> in the <i>AWS CLI Command Reference</i>.</p> </dd> <dt>Using
     * REST API</dt> <dd> <p>If you use REST to make API calls, you must authenticate
     * your request by providing a signature. Amazon Chime supports signature version
     * 4. For more information, see <a
     * href="https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html">Signature
     * Version 4 Signing Process</a> in the <i>Amazon Web Services General
     * Reference</i>.</p> <p>When making REST API calls, use the service name
     * <code>chime</code> and REST endpoint
     * <code>https://service.chime.aws.amazon.com</code>.</p> </dd> </dl>
     * <p>Administrative permissions are controlled using AWS Identity and Access
     * Management (IAM). For more information, see <a
     * href="https://docs.aws.amazon.com/chime/latest/ag/control-access.html">Control
     * Access to the Amazon Chime Console</a> in the <i>Amazon Chime Administration
     * Guide</i>.</p>
     */
    class AWS_CHIME_API ChimeClient : public Aws::Client::AWSJsonClient
    {
      public:
        typedef Aws::Client::AWSJsonClient BASECLASS;
  
         /**
          * 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.
          */
          ChimeClient(const Aws::Client::ClientConfiguration& clientConfiguration = Aws::Client::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.
          */
          ChimeClient(const Aws::Auth::AWSCredentials& credentials, const Aws::Client::ClientConfiguration& clientConfiguration = Aws::Client::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
          */
          ChimeClient(const std::shared_ptr<Aws::Auth::AWSCredentialsProvider>& credentialsProvider,
              const Aws::Client::ClientConfiguration& clientConfiguration = Aws::Client::ClientConfiguration());
  
          virtual ~ChimeClient();
  
          inline virtual const char* GetServiceClientName() const override { return "Chime"; }
  
  
          /**
           * <p>Suspends up to 50 users from a <code>Team</code> or
           * <code>EnterpriseLWA</code> Amazon Chime account. For more information about
           * different account types, see <a
           * href="https://docs.aws.amazon.com/chime/latest/ag/manage-chime-account.html">Managing
           * Your Amazon Chime Accounts</a> in the <i>Amazon Chime Administration
           * Guide</i>.</p> <p>Users suspended from a <code>Team</code> account are
           * dissociated from the account, but they can continue to use Amazon Chime as free
           * users. To remove the suspension from suspended <code>Team</code> account users,
           * invite them to the <code>Team</code> account again. You can use the
           * <a>InviteUsers</a> action to do so.</p> <p>Users suspended from an
           * <code>EnterpriseLWA</code> account are immediately signed out of Amazon Chime
           * and are no longer able to sign in. To remove the suspension from suspended
           * <code>EnterpriseLWA</code> account users, use the <a>BatchUnsuspendUser</a>
           * action. </p> <p>To sign out users without suspending them, use the
           * <a>LogoutUser</a> action.</p><p><h3>See Also:</h3>   <a
           * href="http://docs.aws.amazon.com/goto/WebAPI/chime-2018-05-01/BatchSuspendUser">AWS
           * API Reference</a></p>
           */
          virtual Model::BatchSuspendUserOutcome BatchSuspendUser(const Model::BatchSuspendUserRequest& request) const;
  
          /**
           * <p>Suspends up to 50 users from a <code>Team</code> or
           * <code>EnterpriseLWA</code> Amazon Chime account. For more information about
           * different account types, see <a
           * href="https://docs.aws.amazon.com/chime/latest/ag/manage-chime-account.html">Managing
           * Your Amazon Chime Accounts</a> in the <i>Amazon Chime Administration
           * Guide</i>.</p> <p>Users suspended from a <code>Team</code> account are
           * dissociated from the account, but they can continue to use Amazon Chime as free
           * users. To remove the suspension from suspended <code>Team</code> account users,
           * invite them to the <code>Team</code> account again. You can use the
           * <a>InviteUsers</a> action to do so.</p> <p>Users suspended from an
           * <code>EnterpriseLWA</code> account are immediately signed out of Amazon Chime
           * and are no longer able to sign in. To remove the suspension from suspended
           * <code>EnterpriseLWA</code> account users, use the <a>BatchUnsuspendUser</a>
           * action. </p> <p>To sign out users without suspending them, use the
           * <a>LogoutUser</a> action.</p><p><h3>See Also:</h3>   <a
           * href="http://docs.aws.amazon.com/goto/WebAPI/chime-2018-05-01/BatchSuspendUser">AWS
           * API Reference</a></p>
           *
           * returns a future to the operation so that it can be executed in parallel to other requests.
           */
          virtual Model::BatchSuspendUserOutcomeCallable BatchSuspendUserCallable(const Model::BatchSuspendUserRequest& request) const;
  
          /**
           * <p>Suspends up to 50 users from a <code>Team</code> or
           * <code>EnterpriseLWA</code> Amazon Chime account. For more information about
           * different account types, see <a
           * href="https://docs.aws.amazon.com/chime/latest/ag/manage-chime-account.html">Managing
           * Your Amazon Chime Accounts</a> in the <i>Amazon Chime Administration
           * Guide</i>.</p> <p>Users suspended from a <code>Team</code> account are
           * dissociated from the account, but they can continue to use Amazon Chime as free
           * users. To remove the suspension from suspended <code>Team</code> account users,
           * invite them to the <code>Team</code> account again. You can use the
           * <a>InviteUsers</a> action to do so.</p> <p>Users suspended from an
           * <code>EnterpriseLWA</code> account are immediately signed out of Amazon Chime
           * and are no longer able to sign in. To remove the suspension from suspended
           * <code>EnterpriseLWA</code> account users, use the <a>BatchUnsuspendUser</a>
           * action. </p> <p>To sign out users without suspending them, use the
           * <a>LogoutUser</a> action.</p><p><h3>See Also:</h3>   <a
           * href="http://docs.aws.amazon.com/goto/WebAPI/chime-2018-05-01/BatchSuspendUser">AWS
           * API Reference</a></p>
           *
           * Queues the request into a thread executor and triggers associated callback when operation has finished.
           */
          virtual void BatchSuspendUserAsync(const Model::BatchSuspendUserRequest& request, const BatchSuspendUserResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
  
          /**
           * <p>Removes the suspension from up to 50 previously suspended users for the
           * specified Amazon Chime <code>EnterpriseLWA</code> account. Only users on
           * <code>EnterpriseLWA</code> accounts can be unsuspended using this action. For
           * more information about different account types, see <a
           * href="https://docs.aws.amazon.com/chime/latest/ag/manage-chime-account.html">Managing
           * Your Amazon Chime Accounts</a> in the <i>Amazon Chime Administration
           * Guide</i>.</p> <p>Previously suspended users who are unsuspended using this
           * action are returned to <code>Registered</code> status. Users who are not
           * previously suspended are ignored.</p><p><h3>See Also:</h3>   <a
           * href="http://docs.aws.amazon.com/goto/WebAPI/chime-2018-05-01/BatchUnsuspendUser">AWS
           * API Reference</a></p>
           */
          virtual Model::BatchUnsuspendUserOutcome BatchUnsuspendUser(const Model::BatchUnsuspendUserRequest& request) const;
  
          /**
           * <p>Removes the suspension from up to 50 previously suspended users for the
           * specified Amazon Chime <code>EnterpriseLWA</code> account. Only users on
           * <code>EnterpriseLWA</code> accounts can be unsuspended using this action. For
           * more information about different account types, see <a
           * href="https://docs.aws.amazon.com/chime/latest/ag/manage-chime-account.html">Managing
           * Your Amazon Chime Accounts</a> in the <i>Amazon Chime Administration
           * Guide</i>.</p> <p>Previously suspended users who are unsuspended using this
           * action are returned to <code>Registered</code> status. Users who are not
           * previously suspended are ignored.</p><p><h3>See Also:</h3>   <a
           * href="http://docs.aws.amazon.com/goto/WebAPI/chime-2018-05-01/BatchUnsuspendUser">AWS
           * API Reference</a></p>
           *
           * returns a future to the operation so that it can be executed in parallel to other requests.
           */
          virtual Model::BatchUnsuspendUserOutcomeCallable BatchUnsuspendUserCallable(const Model::BatchUnsuspendUserRequest& request) const;
  
          /**
           * <p>Removes the suspension from up to 50 previously suspended users for the
           * specified Amazon Chime <code>EnterpriseLWA</code> account. Only users on
           * <code>EnterpriseLWA</code> accounts can be unsuspended using this action. For
           * more information about different account types, see <a
           * href="https://docs.aws.amazon.com/chime/latest/ag/manage-chime-account.html">Managing
           * Your Amazon Chime Accounts</a> in the <i>Amazon Chime Administration
           * Guide</i>.</p> <p>Previously suspended users who are unsuspended using this
           * action are returned to <code>Registered</code> status. Users who are not
           * previously suspended are ignored.</p><p><h3>See Also:</h3>   <a
           * href="http://docs.aws.amazon.com/goto/WebAPI/chime-2018-05-01/BatchUnsuspendUser">AWS
           * API Reference</a></p>
           *
           * Queues the request into a thread executor and triggers associated callback when operation has finished.
           */
          virtual void BatchUnsuspendUserAsync(const Model::BatchUnsuspendUserRequest& request, const BatchUnsuspendUserResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
  
          /**
           * <p>Updates user details within the <a>UpdateUserRequestItem</a> object for up to
           * 20 users for the specified Amazon Chime account. Currently, only
           * <code>LicenseType</code> updates are supported for this action.</p><p><h3>See
           * Also:</h3>   <a
           * href="http://docs.aws.amazon.com/goto/WebAPI/chime-2018-05-01/BatchUpdateUser">AWS
           * API Reference</a></p>
           */
          virtual Model::BatchUpdateUserOutcome BatchUpdateUser(const Model::BatchUpdateUserRequest& request) const;
  
          /**
           * <p>Updates user details within the <a>UpdateUserRequestItem</a> object for up to
           * 20 users for the specified Amazon Chime account. Currently, only
           * <code>LicenseType</code> updates are supported for this action.</p><p><h3>See
           * Also:</h3>   <a
           * href="http://docs.aws.amazon.com/goto/WebAPI/chime-2018-05-01/BatchUpdateUser">AWS
           * API Reference</a></p>
           *
           * returns a future to the operation so that it can be executed in parallel to other requests.
           */
          virtual Model::BatchUpdateUserOutcomeCallable BatchUpdateUserCallable(const Model::BatchUpdateUserRequest& request) const;
  
          /**
           * <p>Updates user details within the <a>UpdateUserRequestItem</a> object for up to
           * 20 users for the specified Amazon Chime account. Currently, only
           * <code>LicenseType</code> updates are supported for this action.</p><p><h3>See
           * Also:</h3>   <a
           * href="http://docs.aws.amazon.com/goto/WebAPI/chime-2018-05-01/BatchUpdateUser">AWS
           * API Reference</a></p>
           *
           * Queues the request into a thread executor and triggers associated callback when operation has finished.
           */
          virtual void BatchUpdateUserAsync(const Model::BatchUpdateUserRequest& request, const BatchUpdateUserResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
  
          /**
           * <p>Creates an Amazon Chime account under the administrator's AWS account. Only
           * <code>Team</code> account types are currently supported for this action. For
           * more information about different account types, see <a
           * href="https://docs.aws.amazon.com/chime/latest/ag/manage-chime-account.html">Managing
           * Your Amazon Chime Accounts</a> in the <i>Amazon Chime Administration
           * Guide</i>.</p><p><h3>See Also:</h3>   <a
           * href="http://docs.aws.amazon.com/goto/WebAPI/chime-2018-05-01/CreateAccount">AWS
           * API Reference</a></p>
           */
          virtual Model::CreateAccountOutcome CreateAccount(const Model::CreateAccountRequest& request) const;
  
          /**
           * <p>Creates an Amazon Chime account under the administrator's AWS account. Only
           * <code>Team</code> account types are currently supported for this action. For
           * more information about different account types, see <a
           * href="https://docs.aws.amazon.com/chime/latest/ag/manage-chime-account.html">Managing
           * Your Amazon Chime Accounts</a> in the <i>Amazon Chime Administration
           * Guide</i>.</p><p><h3>See Also:</h3>   <a
           * href="http://docs.aws.amazon.com/goto/WebAPI/chime-2018-05-01/CreateAccount">AWS
           * API Reference</a></p>
           *
           * returns a future to the operation so that it can be executed in parallel to other requests.
           */
          virtual Model::CreateAccountOutcomeCallable CreateAccountCallable(const Model::CreateAccountRequest& request) const;
  
          /**
           * <p>Creates an Amazon Chime account under the administrator's AWS account. Only
           * <code>Team</code> account types are currently supported for this action. For
           * more information about different account types, see <a
           * href="https://docs.aws.amazon.com/chime/latest/ag/manage-chime-account.html">Managing
           * Your Amazon Chime Accounts</a> in the <i>Amazon Chime Administration
           * Guide</i>.</p><p><h3>See Also:</h3>   <a
           * href="http://docs.aws.amazon.com/goto/WebAPI/chime-2018-05-01/CreateAccount">AWS
           * API Reference</a></p>
           *
           * Queues the request into a thread executor and triggers associated callback when operation has finished.
           */
          virtual void CreateAccountAsync(const Model::CreateAccountRequest& request, const CreateAccountResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
  
          /**
           * <p>Deletes the specified Amazon Chime account. You must suspend all users before
           * deleting a <code>Team</code> account. You can use the <a>BatchSuspendUser</a>
           * action to do so.</p> <p>For <code>EnterpriseLWA</code> and
           * <code>EnterpriseAD</code> accounts, you must release the claimed domains for
           * your Amazon Chime account before deletion. As soon as you release the domain,
           * all users under that account are suspended.</p> <p>Deleted accounts appear in
           * your <code>Disabled</code> accounts list for 90 days. To restore a deleted
           * account from your <code>Disabled</code> accounts list, you must contact AWS
           * Support.</p> <p>After 90 days, deleted accounts are permanently removed from
           * your <code>Disabled</code> accounts list.</p><p><h3>See Also:</h3>   <a
           * href="http://docs.aws.amazon.com/goto/WebAPI/chime-2018-05-01/DeleteAccount">AWS
           * API Reference</a></p>
           */
          virtual Model::DeleteAccountOutcome DeleteAccount(const Model::DeleteAccountRequest& request) const;
  
          /**
           * <p>Deletes the specified Amazon Chime account. You must suspend all users before
           * deleting a <code>Team</code> account. You can use the <a>BatchSuspendUser</a>
           * action to do so.</p> <p>For <code>EnterpriseLWA</code> and
           * <code>EnterpriseAD</code> accounts, you must release the claimed domains for
           * your Amazon Chime account before deletion. As soon as you release the domain,
           * all users under that account are suspended.</p> <p>Deleted accounts appear in
           * your <code>Disabled</code> accounts list for 90 days. To restore a deleted
           * account from your <code>Disabled</code> accounts list, you must contact AWS
           * Support.</p> <p>After 90 days, deleted accounts are permanently removed from
           * your <code>Disabled</code> accounts list.</p><p><h3>See Also:</h3>   <a
           * href="http://docs.aws.amazon.com/goto/WebAPI/chime-2018-05-01/DeleteAccount">AWS
           * API Reference</a></p>
           *
           * returns a future to the operation so that it can be executed in parallel to other requests.
           */
          virtual Model::DeleteAccountOutcomeCallable DeleteAccountCallable(const Model::DeleteAccountRequest& request) const;
  
          /**
           * <p>Deletes the specified Amazon Chime account. You must suspend all users before
           * deleting a <code>Team</code> account. You can use the <a>BatchSuspendUser</a>
           * action to do so.</p> <p>For <code>EnterpriseLWA</code> and
           * <code>EnterpriseAD</code> accounts, you must release the claimed domains for
           * your Amazon Chime account before deletion. As soon as you release the domain,
           * all users under that account are suspended.</p> <p>Deleted accounts appear in
           * your <code>Disabled</code> accounts list for 90 days. To restore a deleted
           * account from your <code>Disabled</code> accounts list, you must contact AWS
           * Support.</p> <p>After 90 days, deleted accounts are permanently removed from
           * your <code>Disabled</code> accounts list.</p><p><h3>See Also:</h3>   <a
           * href="http://docs.aws.amazon.com/goto/WebAPI/chime-2018-05-01/DeleteAccount">AWS
           * API Reference</a></p>
           *
           * Queues the request into a thread executor and triggers associated callback when operation has finished.
           */
          virtual void DeleteAccountAsync(const Model::DeleteAccountRequest& request, const DeleteAccountResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
  
          /**
           * <p>Retrieves details for the specified Amazon Chime account, such as account
           * type and supported licenses.</p><p><h3>See Also:</h3>   <a
           * href="http://docs.aws.amazon.com/goto/WebAPI/chime-2018-05-01/GetAccount">AWS
           * API Reference</a></p>
           */
          virtual Model::GetAccountOutcome GetAccount(const Model::GetAccountRequest& request) const;
  
          /**
           * <p>Retrieves details for the specified Amazon Chime account, such as account
           * type and supported licenses.</p><p><h3>See Also:</h3>   <a
           * href="http://docs.aws.amazon.com/goto/WebAPI/chime-2018-05-01/GetAccount">AWS
           * API Reference</a></p>
           *
           * returns a future to the operation so that it can be executed in parallel to other requests.
           */
          virtual Model::GetAccountOutcomeCallable GetAccountCallable(const Model::GetAccountRequest& request) const;
  
          /**
           * <p>Retrieves details for the specified Amazon Chime account, such as account
           * type and supported licenses.</p><p><h3>See Also:</h3>   <a
           * href="http://docs.aws.amazon.com/goto/WebAPI/chime-2018-05-01/GetAccount">AWS
           * API Reference</a></p>
           *
           * Queues the request into a thread executor and triggers associated callback when operation has finished.
           */
          virtual void GetAccountAsync(const Model::GetAccountRequest& request, const GetAccountResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
  
          /**
           * <p>Retrieves account settings for the specified Amazon Chime account ID, such as
           * remote control and dial out settings. For more information about these settings,
           * see <a href="https://docs.aws.amazon.com/chime/latest/ag/policies.html">Use the
           * Policies Page</a> in the <i>Amazon Chime Administration Guide</i>.</p><p><h3>See
           * Also:</h3>   <a
           * href="http://docs.aws.amazon.com/goto/WebAPI/chime-2018-05-01/GetAccountSettings">AWS
           * API Reference</a></p>
           */
          virtual Model::GetAccountSettingsOutcome GetAccountSettings(const Model::GetAccountSettingsRequest& request) const;
  
          /**
           * <p>Retrieves account settings for the specified Amazon Chime account ID, such as
           * remote control and dial out settings. For more information about these settings,
           * see <a href="https://docs.aws.amazon.com/chime/latest/ag/policies.html">Use the
           * Policies Page</a> in the <i>Amazon Chime Administration Guide</i>.</p><p><h3>See
           * Also:</h3>   <a
           * href="http://docs.aws.amazon.com/goto/WebAPI/chime-2018-05-01/GetAccountSettings">AWS
           * API Reference</a></p>
           *
           * returns a future to the operation so that it can be executed in parallel to other requests.
           */
          virtual Model::GetAccountSettingsOutcomeCallable GetAccountSettingsCallable(const Model::GetAccountSettingsRequest& request) const;
  
          /**
           * <p>Retrieves account settings for the specified Amazon Chime account ID, such as
           * remote control and dial out settings. For more information about these settings,
           * see <a href="https://docs.aws.amazon.com/chime/latest/ag/policies.html">Use the
           * Policies Page</a> in the <i>Amazon Chime Administration Guide</i>.</p><p><h3>See
           * Also:</h3>   <a
           * href="http://docs.aws.amazon.com/goto/WebAPI/chime-2018-05-01/GetAccountSettings">AWS
           * API Reference</a></p>
           *
           * Queues the request into a thread executor and triggers associated callback when operation has finished.
           */
          virtual void GetAccountSettingsAsync(const Model::GetAccountSettingsRequest& request, const GetAccountSettingsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
  
          /**
           * <p>Retrieves details for the specified user ID, such as primary email address,
           * license type, and personal meeting PIN.</p> <p>To retrieve user details with an
           * email address instead of a user ID, use the <a>ListUsers</a> action, and then
           * filter by email address.</p><p><h3>See Also:</h3>   <a
           * href="http://docs.aws.amazon.com/goto/WebAPI/chime-2018-05-01/GetUser">AWS API
           * Reference</a></p>
           */
          virtual Model::GetUserOutcome GetUser(const Model::GetUserRequest& request) const;
  
          /**
           * <p>Retrieves details for the specified user ID, such as primary email address,
           * license type, and personal meeting PIN.</p> <p>To retrieve user details with an
           * email address instead of a user ID, use the <a>ListUsers</a> action, and then
           * filter by email address.</p><p><h3>See Also:</h3>   <a
           * href="http://docs.aws.amazon.com/goto/WebAPI/chime-2018-05-01/GetUser">AWS API
           * Reference</a></p>
           *
           * returns a future to the operation so that it can be executed in parallel to other requests.
           */
          virtual Model::GetUserOutcomeCallable GetUserCallable(const Model::GetUserRequest& request) const;
  
          /**
           * <p>Retrieves details for the specified user ID, such as primary email address,
           * license type, and personal meeting PIN.</p> <p>To retrieve user details with an
           * email address instead of a user ID, use the <a>ListUsers</a> action, and then
           * filter by email address.</p><p><h3>See Also:</h3>   <a
           * href="http://docs.aws.amazon.com/goto/WebAPI/chime-2018-05-01/GetUser">AWS API
           * Reference</a></p>
           *
           * Queues the request into a thread executor and triggers associated callback when operation has finished.
           */
          virtual void GetUserAsync(const Model::GetUserRequest& request, const GetUserResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
  
          /**
           * <p>Sends email invites to as many as 50 users, inviting them to the specified
           * Amazon Chime <code>Team</code> account. Only <code>Team</code> account types are
           * currently supported for this action. </p><p><h3>See Also:</h3>   <a
           * href="http://docs.aws.amazon.com/goto/WebAPI/chime-2018-05-01/InviteUsers">AWS
           * API Reference</a></p>
           */
          virtual Model::InviteUsersOutcome InviteUsers(const Model::InviteUsersRequest& request) const;
  
          /**
           * <p>Sends email invites to as many as 50 users, inviting them to the specified
           * Amazon Chime <code>Team</code> account. Only <code>Team</code> account types are
           * currently supported for this action. </p><p><h3>See Also:</h3>   <a
           * href="http://docs.aws.amazon.com/goto/WebAPI/chime-2018-05-01/InviteUsers">AWS
           * API Reference</a></p>
           *
           * returns a future to the operation so that it can be executed in parallel to other requests.
           */
          virtual Model::InviteUsersOutcomeCallable InviteUsersCallable(const Model::InviteUsersRequest& request) const;
  
          /**
           * <p>Sends email invites to as many as 50 users, inviting them to the specified
           * Amazon Chime <code>Team</code> account. Only <code>Team</code> account types are
           * currently supported for this action. </p><p><h3>See Also:</h3>   <a
           * href="http://docs.aws.amazon.com/goto/WebAPI/chime-2018-05-01/InviteUsers">AWS
           * API Reference</a></p>
           *
           * Queues the request into a thread executor and triggers associated callback when operation has finished.
           */
          virtual void InviteUsersAsync(const Model::InviteUsersRequest& request, const InviteUsersResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
  
          /**
           * <p>Lists the Amazon Chime accounts under the administrator's AWS account. You
           * can filter accounts by account name prefix. To find out which Amazon Chime
           * account a user belongs to, you can filter by the user's email address, which
           * returns one account result.</p><p><h3>See Also:</h3>   <a
           * href="http://docs.aws.amazon.com/goto/WebAPI/chime-2018-05-01/ListAccounts">AWS
           * API Reference</a></p>
           */
          virtual Model::ListAccountsOutcome ListAccounts(const Model::ListAccountsRequest& request) const;
  
          /**
           * <p>Lists the Amazon Chime accounts under the administrator's AWS account. You
           * can filter accounts by account name prefix. To find out which Amazon Chime
           * account a user belongs to, you can filter by the user's email address, which
           * returns one account result.</p><p><h3>See Also:</h3>   <a
           * href="http://docs.aws.amazon.com/goto/WebAPI/chime-2018-05-01/ListAccounts">AWS
           * API Reference</a></p>
           *
           * returns a future to the operation so that it can be executed in parallel to other requests.
           */
          virtual Model::ListAccountsOutcomeCallable ListAccountsCallable(const Model::ListAccountsRequest& request) const;
  
          /**
           * <p>Lists the Amazon Chime accounts under the administrator's AWS account. You
           * can filter accounts by account name prefix. To find out which Amazon Chime
           * account a user belongs to, you can filter by the user's email address, which
           * returns one account result.</p><p><h3>See Also:</h3>   <a
           * href="http://docs.aws.amazon.com/goto/WebAPI/chime-2018-05-01/ListAccounts">AWS
           * API Reference</a></p>
           *
           * Queues the request into a thread executor and triggers associated callback when operation has finished.
           */
          virtual void ListAccountsAsync(const Model::ListAccountsRequest& request, const ListAccountsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
  
          /**
           * <p>Lists the users that belong to the specified Amazon Chime account. You can
           * specify an email address to list only the user that the email address belongs
           * to.</p><p><h3>See Also:</h3>   <a
           * href="http://docs.aws.amazon.com/goto/WebAPI/chime-2018-05-01/ListUsers">AWS API
           * Reference</a></p>
           */
          virtual Model::ListUsersOutcome ListUsers(const Model::ListUsersRequest& request) const;
  
          /**
           * <p>Lists the users that belong to the specified Amazon Chime account. You can
           * specify an email address to list only the user that the email address belongs
           * to.</p><p><h3>See Also:</h3>   <a
           * href="http://docs.aws.amazon.com/goto/WebAPI/chime-2018-05-01/ListUsers">AWS API
           * Reference</a></p>
           *
           * returns a future to the operation so that it can be executed in parallel to other requests.
           */
          virtual Model::ListUsersOutcomeCallable ListUsersCallable(const Model::ListUsersRequest& request) const;
  
          /**
           * <p>Lists the users that belong to the specified Amazon Chime account. You can
           * specify an email address to list only the user that the email address belongs
           * to.</p><p><h3>See Also:</h3>   <a
           * href="http://docs.aws.amazon.com/goto/WebAPI/chime-2018-05-01/ListUsers">AWS API
           * Reference</a></p>
           *
           * Queues the request into a thread executor and triggers associated callback when operation has finished.
           */
          virtual void ListUsersAsync(const Model::ListUsersRequest& request, const ListUsersResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
  
          /**
           * <p>Logs out the specified user from all of the devices they are currently logged
           * into.</p><p><h3>See Also:</h3>   <a
           * href="http://docs.aws.amazon.com/goto/WebAPI/chime-2018-05-01/LogoutUser">AWS
           * API Reference</a></p>
           */
          virtual Model::LogoutUserOutcome LogoutUser(const Model::LogoutUserRequest& request) const;
  
          /**
           * <p>Logs out the specified user from all of the devices they are currently logged
           * into.</p><p><h3>See Also:</h3>   <a
           * href="http://docs.aws.amazon.com/goto/WebAPI/chime-2018-05-01/LogoutUser">AWS
           * API Reference</a></p>
           *
           * returns a future to the operation so that it can be executed in parallel to other requests.
           */
          virtual Model::LogoutUserOutcomeCallable LogoutUserCallable(const Model::LogoutUserRequest& request) const;
  
          /**
           * <p>Logs out the specified user from all of the devices they are currently logged
           * into.</p><p><h3>See Also:</h3>   <a
           * href="http://docs.aws.amazon.com/goto/WebAPI/chime-2018-05-01/LogoutUser">AWS
           * API Reference</a></p>
           *
           * Queues the request into a thread executor and triggers associated callback when operation has finished.
           */
          virtual void LogoutUserAsync(const Model::LogoutUserRequest& request, const LogoutUserResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
  
          /**
           * <p>Resets the personal meeting PIN for the specified user on an Amazon Chime
           * account. Returns the <a>User</a> object with the updated personal meeting
           * PIN.</p><p><h3>See Also:</h3>   <a
           * href="http://docs.aws.amazon.com/goto/WebAPI/chime-2018-05-01/ResetPersonalPIN">AWS
           * API Reference</a></p>
           */
          virtual Model::ResetPersonalPINOutcome ResetPersonalPIN(const Model::ResetPersonalPINRequest& request) const;
  
          /**
           * <p>Resets the personal meeting PIN for the specified user on an Amazon Chime
           * account. Returns the <a>User</a> object with the updated personal meeting
           * PIN.</p><p><h3>See Also:</h3>   <a
           * href="http://docs.aws.amazon.com/goto/WebAPI/chime-2018-05-01/ResetPersonalPIN">AWS
           * API Reference</a></p>
           *
           * returns a future to the operation so that it can be executed in parallel to other requests.
           */
          virtual Model::ResetPersonalPINOutcomeCallable ResetPersonalPINCallable(const Model::ResetPersonalPINRequest& request) const;
  
          /**
           * <p>Resets the personal meeting PIN for the specified user on an Amazon Chime
           * account. Returns the <a>User</a> object with the updated personal meeting
           * PIN.</p><p><h3>See Also:</h3>   <a
           * href="http://docs.aws.amazon.com/goto/WebAPI/chime-2018-05-01/ResetPersonalPIN">AWS
           * API Reference</a></p>
           *
           * Queues the request into a thread executor and triggers associated callback when operation has finished.
           */
          virtual void ResetPersonalPINAsync(const Model::ResetPersonalPINRequest& request, const ResetPersonalPINResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
  
          /**
           * <p>Updates account details for the specified Amazon Chime account. Currently,
           * only account name updates are supported for this action.</p><p><h3>See
           * Also:</h3>   <a
           * href="http://docs.aws.amazon.com/goto/WebAPI/chime-2018-05-01/UpdateAccount">AWS
           * API Reference</a></p>
           */
          virtual Model::UpdateAccountOutcome UpdateAccount(const Model::UpdateAccountRequest& request) const;
  
          /**
           * <p>Updates account details for the specified Amazon Chime account. Currently,
           * only account name updates are supported for this action.</p><p><h3>See
           * Also:</h3>   <a
           * href="http://docs.aws.amazon.com/goto/WebAPI/chime-2018-05-01/UpdateAccount">AWS
           * API Reference</a></p>
           *
           * returns a future to the operation so that it can be executed in parallel to other requests.
           */
          virtual Model::UpdateAccountOutcomeCallable UpdateAccountCallable(const Model::UpdateAccountRequest& request) const;
  
          /**
           * <p>Updates account details for the specified Amazon Chime account. Currently,
           * only account name updates are supported for this action.</p><p><h3>See
           * Also:</h3>   <a
           * href="http://docs.aws.amazon.com/goto/WebAPI/chime-2018-05-01/UpdateAccount">AWS
           * API Reference</a></p>
           *
           * Queues the request into a thread executor and triggers associated callback when operation has finished.
           */
          virtual void UpdateAccountAsync(const Model::UpdateAccountRequest& request, const UpdateAccountResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
  
          /**
           * <p>Updates the settings for the specified Amazon Chime account. You can update
           * settings for remote control of shared screens, or for the dial-out option. For
           * more information about these settings, see <a
           * href="https://docs.aws.amazon.com/chime/latest/ag/policies.html">Use the
           * Policies Page</a> in the <i>Amazon Chime Administration Guide</i>.</p><p><h3>See
           * Also:</h3>   <a
           * href="http://docs.aws.amazon.com/goto/WebAPI/chime-2018-05-01/UpdateAccountSettings">AWS
           * API Reference</a></p>
           */
          virtual Model::UpdateAccountSettingsOutcome UpdateAccountSettings(const Model::UpdateAccountSettingsRequest& request) const;
  
          /**
           * <p>Updates the settings for the specified Amazon Chime account. You can update
           * settings for remote control of shared screens, or for the dial-out option. For
           * more information about these settings, see <a
           * href="https://docs.aws.amazon.com/chime/latest/ag/policies.html">Use the
           * Policies Page</a> in the <i>Amazon Chime Administration Guide</i>.</p><p><h3>See
           * Also:</h3>   <a
           * href="http://docs.aws.amazon.com/goto/WebAPI/chime-2018-05-01/UpdateAccountSettings">AWS
           * API Reference</a></p>
           *
           * returns a future to the operation so that it can be executed in parallel to other requests.
           */
          virtual Model::UpdateAccountSettingsOutcomeCallable UpdateAccountSettingsCallable(const Model::UpdateAccountSettingsRequest& request) const;
  
          /**
           * <p>Updates the settings for the specified Amazon Chime account. You can update
           * settings for remote control of shared screens, or for the dial-out option. For
           * more information about these settings, see <a
           * href="https://docs.aws.amazon.com/chime/latest/ag/policies.html">Use the
           * Policies Page</a> in the <i>Amazon Chime Administration Guide</i>.</p><p><h3>See
           * Also:</h3>   <a
           * href="http://docs.aws.amazon.com/goto/WebAPI/chime-2018-05-01/UpdateAccountSettings">AWS
           * API Reference</a></p>
           *
           * Queues the request into a thread executor and triggers associated callback when operation has finished.
           */
          virtual void UpdateAccountSettingsAsync(const Model::UpdateAccountSettingsRequest& request, const UpdateAccountSettingsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
  
          /**
           * <p>Updates user details for a specified user ID. Currently, only
           * <code>LicenseType</code> updates are supported for this action.</p><p><h3>See
           * Also:</h3>   <a
           * href="http://docs.aws.amazon.com/goto/WebAPI/chime-2018-05-01/UpdateUser">AWS
           * API Reference</a></p>
           */
          virtual Model::UpdateUserOutcome UpdateUser(const Model::UpdateUserRequest& request) const;
  
          /**
           * <p>Updates user details for a specified user ID. Currently, only
           * <code>LicenseType</code> updates are supported for this action.</p><p><h3>See
           * Also:</h3>   <a
           * href="http://docs.aws.amazon.com/goto/WebAPI/chime-2018-05-01/UpdateUser">AWS
           * API Reference</a></p>
           *
           * returns a future to the operation so that it can be executed in parallel to other requests.
           */
          virtual Model::UpdateUserOutcomeCallable UpdateUserCallable(const Model::UpdateUserRequest& request) const;
  
          /**
           * <p>Updates user details for a specified user ID. Currently, only
           * <code>LicenseType</code> updates are supported for this action.</p><p><h3>See
           * Also:</h3>   <a
           * href="http://docs.aws.amazon.com/goto/WebAPI/chime-2018-05-01/UpdateUser">AWS
           * API Reference</a></p>
           *
           * Queues the request into a thread executor and triggers associated callback when operation has finished.
           */
          virtual void UpdateUserAsync(const Model::UpdateUserRequest& request, const UpdateUserResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
  
        
        void OverrideEndpoint(const Aws::String& endpoint);
      private:
        void init(const Aws::Client::ClientConfiguration& clientConfiguration);
          /**Async helpers**/
          void BatchSuspendUserAsyncHelper(const Model::BatchSuspendUserRequest& request, const BatchSuspendUserResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
          void BatchUnsuspendUserAsyncHelper(const Model::BatchUnsuspendUserRequest& request, const BatchUnsuspendUserResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
          void BatchUpdateUserAsyncHelper(const Model::BatchUpdateUserRequest& request, const BatchUpdateUserResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
          void CreateAccountAsyncHelper(const Model::CreateAccountRequest& request, const CreateAccountResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
          void DeleteAccountAsyncHelper(const Model::DeleteAccountRequest& request, const DeleteAccountResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
          void GetAccountAsyncHelper(const Model::GetAccountRequest& request, const GetAccountResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
          void GetAccountSettingsAsyncHelper(const Model::GetAccountSettingsRequest& request, const GetAccountSettingsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
          void GetUserAsyncHelper(const Model::GetUserRequest& request, const GetUserResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
          void InviteUsersAsyncHelper(const Model::InviteUsersRequest& request, const InviteUsersResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
          void ListAccountsAsyncHelper(const Model::ListAccountsRequest& request, const ListAccountsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
          void ListUsersAsyncHelper(const Model::ListUsersRequest& request, const ListUsersResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
          void LogoutUserAsyncHelper(const Model::LogoutUserRequest& request, const LogoutUserResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
          void ResetPersonalPINAsyncHelper(const Model::ResetPersonalPINRequest& request, const ResetPersonalPINResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
          void UpdateAccountAsyncHelper(const Model::UpdateAccountRequest& request, const UpdateAccountResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
          void UpdateAccountSettingsAsyncHelper(const Model::UpdateAccountSettingsRequest& request, const UpdateAccountSettingsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
          void UpdateUserAsyncHelper(const Model::UpdateUserRequest& request, const UpdateUserResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
  
        Aws::String m_uri;
        Aws::String m_configScheme;
        std::shared_ptr<Aws::Utils::Threading::Executor> m_executor;
    };
  
  } // namespace Chime
  } // namespace Aws
  