/**
 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
 * SPDX-License-Identifier: Apache-2.0.
 */

#pragma once

/* Generic header includes */
#include <aws/core/client/AWSError.h>
#include <aws/core/client/AsyncCallerContext.h>
#include <aws/core/client/GenericClientConfiguration.h>
#include <aws/core/http/HttpTypes.h>
#include <aws/core/utils/memory/stl/AWSString.h>
#include <aws/s3control/S3ControlEndpointProvider.h>
#include <aws/s3control/S3ControlErrors.h>

#include <functional>
#include <future>
/* End of generic header includes */

/* Service model headers required in S3ControlClient header */
#include <aws/core/NoResult.h>
#include <aws/s3control/model/CreateAccessGrantResult.h>
#include <aws/s3control/model/CreateAccessGrantsInstanceResult.h>
#include <aws/s3control/model/CreateAccessGrantsLocationResult.h>
#include <aws/s3control/model/CreateAccessPointForObjectLambdaResult.h>
#include <aws/s3control/model/CreateAccessPointResult.h>
#include <aws/s3control/model/CreateBucketResult.h>
#include <aws/s3control/model/CreateJobResult.h>
#include <aws/s3control/model/CreateMultiRegionAccessPointResult.h>
#include <aws/s3control/model/DeleteJobTaggingResult.h>
#include <aws/s3control/model/DeleteMultiRegionAccessPointResult.h>
#include <aws/s3control/model/DeleteStorageLensConfigurationTaggingResult.h>
#include <aws/s3control/model/DescribeJobResult.h>
#include <aws/s3control/model/DescribeMultiRegionAccessPointOperationResult.h>
#include <aws/s3control/model/GetAccessGrantResult.h>
#include <aws/s3control/model/GetAccessGrantsInstanceForPrefixResult.h>
#include <aws/s3control/model/GetAccessGrantsInstanceResourcePolicyResult.h>
#include <aws/s3control/model/GetAccessGrantsInstanceResult.h>
#include <aws/s3control/model/GetAccessGrantsLocationResult.h>
#include <aws/s3control/model/GetAccessPointConfigurationForObjectLambdaResult.h>
#include <aws/s3control/model/GetAccessPointForObjectLambdaResult.h>
#include <aws/s3control/model/GetAccessPointPolicyForObjectLambdaResult.h>
#include <aws/s3control/model/GetAccessPointPolicyResult.h>
#include <aws/s3control/model/GetAccessPointPolicyStatusForObjectLambdaResult.h>
#include <aws/s3control/model/GetAccessPointPolicyStatusResult.h>
#include <aws/s3control/model/GetAccessPointResult.h>
#include <aws/s3control/model/GetAccessPointScopeResult.h>
#include <aws/s3control/model/GetBucketLifecycleConfigurationResult.h>
#include <aws/s3control/model/GetBucketPolicyResult.h>
#include <aws/s3control/model/GetBucketReplicationResult.h>
#include <aws/s3control/model/GetBucketResult.h>
#include <aws/s3control/model/GetBucketTaggingResult.h>
#include <aws/s3control/model/GetBucketVersioningResult.h>
#include <aws/s3control/model/GetDataAccessResult.h>
#include <aws/s3control/model/GetJobTaggingResult.h>
#include <aws/s3control/model/GetMultiRegionAccessPointPolicyResult.h>
#include <aws/s3control/model/GetMultiRegionAccessPointPolicyStatusResult.h>
#include <aws/s3control/model/GetMultiRegionAccessPointResult.h>
#include <aws/s3control/model/GetMultiRegionAccessPointRoutesResult.h>
#include <aws/s3control/model/GetPublicAccessBlockResult.h>
#include <aws/s3control/model/GetStorageLensConfigurationResult.h>
#include <aws/s3control/model/GetStorageLensConfigurationTaggingResult.h>
#include <aws/s3control/model/GetStorageLensGroupResult.h>
#include <aws/s3control/model/ListAccessGrantsInstancesResult.h>
#include <aws/s3control/model/ListAccessGrantsLocationsResult.h>
#include <aws/s3control/model/ListAccessGrantsResult.h>
#include <aws/s3control/model/ListAccessPointsForDirectoryBucketsResult.h>
#include <aws/s3control/model/ListAccessPointsForObjectLambdaResult.h>
#include <aws/s3control/model/ListAccessPointsResult.h>
#include <aws/s3control/model/ListCallerAccessGrantsResult.h>
#include <aws/s3control/model/ListJobsResult.h>
#include <aws/s3control/model/ListMultiRegionAccessPointsResult.h>
#include <aws/s3control/model/ListRegionalBucketsResult.h>
#include <aws/s3control/model/ListStorageLensConfigurationsResult.h>
#include <aws/s3control/model/ListStorageLensGroupsResult.h>
#include <aws/s3control/model/ListTagsForResourceResult.h>
#include <aws/s3control/model/PutAccessGrantsInstanceResourcePolicyResult.h>
#include <aws/s3control/model/PutJobTaggingResult.h>
#include <aws/s3control/model/PutMultiRegionAccessPointPolicyResult.h>
#include <aws/s3control/model/PutStorageLensConfigurationTaggingResult.h>
#include <aws/s3control/model/SubmitMultiRegionAccessPointRoutesResult.h>
#include <aws/s3control/model/TagResourceResult.h>
#include <aws/s3control/model/UntagResourceResult.h>
#include <aws/s3control/model/UpdateAccessGrantsLocationResult.h>
#include <aws/s3control/model/UpdateJobPriorityResult.h>
#include <aws/s3control/model/UpdateJobStatusResult.h>
/* End of service model headers required in S3ControlClient header */

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 S3Control {
using S3ControlEndpointProviderBase = Aws::S3Control::Endpoint::S3ControlEndpointProviderBase;
using S3ControlEndpointProvider = Aws::S3Control::Endpoint::S3ControlEndpointProvider;

namespace Model {
/* Service model forward declarations required in S3ControlClient header */
class AssociateAccessGrantsIdentityCenterRequest;
class CreateAccessGrantRequest;
class CreateAccessGrantsInstanceRequest;
class CreateAccessGrantsLocationRequest;
class CreateAccessPointRequest;
class CreateAccessPointForObjectLambdaRequest;
class CreateBucketRequest;
class CreateJobRequest;
class CreateMultiRegionAccessPointRequest;
class CreateStorageLensGroupRequest;
class DeleteAccessGrantRequest;
class DeleteAccessGrantsInstanceRequest;
class DeleteAccessGrantsInstanceResourcePolicyRequest;
class DeleteAccessGrantsLocationRequest;
class DeleteAccessPointRequest;
class DeleteAccessPointForObjectLambdaRequest;
class DeleteAccessPointPolicyRequest;
class DeleteAccessPointPolicyForObjectLambdaRequest;
class DeleteAccessPointScopeRequest;
class DeleteBucketRequest;
class DeleteBucketLifecycleConfigurationRequest;
class DeleteBucketPolicyRequest;
class DeleteBucketReplicationRequest;
class DeleteBucketTaggingRequest;
class DeleteJobTaggingRequest;
class DeleteMultiRegionAccessPointRequest;
class DeletePublicAccessBlockRequest;
class DeleteStorageLensConfigurationRequest;
class DeleteStorageLensConfigurationTaggingRequest;
class DeleteStorageLensGroupRequest;
class DescribeJobRequest;
class DescribeMultiRegionAccessPointOperationRequest;
class DissociateAccessGrantsIdentityCenterRequest;
class GetAccessGrantRequest;
class GetAccessGrantsInstanceRequest;
class GetAccessGrantsInstanceForPrefixRequest;
class GetAccessGrantsInstanceResourcePolicyRequest;
class GetAccessGrantsLocationRequest;
class GetAccessPointRequest;
class GetAccessPointConfigurationForObjectLambdaRequest;
class GetAccessPointForObjectLambdaRequest;
class GetAccessPointPolicyRequest;
class GetAccessPointPolicyForObjectLambdaRequest;
class GetAccessPointPolicyStatusRequest;
class GetAccessPointPolicyStatusForObjectLambdaRequest;
class GetAccessPointScopeRequest;
class GetBucketRequest;
class GetBucketLifecycleConfigurationRequest;
class GetBucketPolicyRequest;
class GetBucketReplicationRequest;
class GetBucketTaggingRequest;
class GetBucketVersioningRequest;
class GetDataAccessRequest;
class GetJobTaggingRequest;
class GetMultiRegionAccessPointRequest;
class GetMultiRegionAccessPointPolicyRequest;
class GetMultiRegionAccessPointPolicyStatusRequest;
class GetMultiRegionAccessPointRoutesRequest;
class GetPublicAccessBlockRequest;
class GetStorageLensConfigurationRequest;
class GetStorageLensConfigurationTaggingRequest;
class GetStorageLensGroupRequest;
class ListAccessGrantsRequest;
class ListAccessGrantsInstancesRequest;
class ListAccessGrantsLocationsRequest;
class ListAccessPointsRequest;
class ListAccessPointsForDirectoryBucketsRequest;
class ListAccessPointsForObjectLambdaRequest;
class ListCallerAccessGrantsRequest;
class ListJobsRequest;
class ListMultiRegionAccessPointsRequest;
class ListRegionalBucketsRequest;
class ListStorageLensConfigurationsRequest;
class ListStorageLensGroupsRequest;
class ListTagsForResourceRequest;
class PutAccessGrantsInstanceResourcePolicyRequest;
class PutAccessPointConfigurationForObjectLambdaRequest;
class PutAccessPointPolicyRequest;
class PutAccessPointPolicyForObjectLambdaRequest;
class PutAccessPointScopeRequest;
class PutBucketLifecycleConfigurationRequest;
class PutBucketPolicyRequest;
class PutBucketReplicationRequest;
class PutBucketTaggingRequest;
class PutBucketVersioningRequest;
class PutJobTaggingRequest;
class PutMultiRegionAccessPointPolicyRequest;
class PutPublicAccessBlockRequest;
class PutStorageLensConfigurationRequest;
class PutStorageLensConfigurationTaggingRequest;
class SubmitMultiRegionAccessPointRoutesRequest;
class TagResourceRequest;
class UntagResourceRequest;
class UpdateAccessGrantsLocationRequest;
class UpdateJobPriorityRequest;
class UpdateJobStatusRequest;
class UpdateStorageLensGroupRequest;
/* End of service model forward declarations required in S3ControlClient header */

/* Service model Outcome class definitions */
typedef Aws::Utils::Outcome<Aws::NoResult, S3ControlError> AssociateAccessGrantsIdentityCenterOutcome;
typedef Aws::Utils::Outcome<CreateAccessGrantResult, S3ControlError> CreateAccessGrantOutcome;
typedef Aws::Utils::Outcome<CreateAccessGrantsInstanceResult, S3ControlError> CreateAccessGrantsInstanceOutcome;
typedef Aws::Utils::Outcome<CreateAccessGrantsLocationResult, S3ControlError> CreateAccessGrantsLocationOutcome;
typedef Aws::Utils::Outcome<CreateAccessPointResult, S3ControlError> CreateAccessPointOutcome;
typedef Aws::Utils::Outcome<CreateAccessPointForObjectLambdaResult, S3ControlError> CreateAccessPointForObjectLambdaOutcome;
typedef Aws::Utils::Outcome<CreateBucketResult, S3ControlError> CreateBucketOutcome;
typedef Aws::Utils::Outcome<CreateJobResult, S3ControlError> CreateJobOutcome;
typedef Aws::Utils::Outcome<CreateMultiRegionAccessPointResult, S3ControlError> CreateMultiRegionAccessPointOutcome;
typedef Aws::Utils::Outcome<Aws::NoResult, S3ControlError> CreateStorageLensGroupOutcome;
typedef Aws::Utils::Outcome<Aws::NoResult, S3ControlError> DeleteAccessGrantOutcome;
typedef Aws::Utils::Outcome<Aws::NoResult, S3ControlError> DeleteAccessGrantsInstanceOutcome;
typedef Aws::Utils::Outcome<Aws::NoResult, S3ControlError> DeleteAccessGrantsInstanceResourcePolicyOutcome;
typedef Aws::Utils::Outcome<Aws::NoResult, S3ControlError> DeleteAccessGrantsLocationOutcome;
typedef Aws::Utils::Outcome<Aws::NoResult, S3ControlError> DeleteAccessPointOutcome;
typedef Aws::Utils::Outcome<Aws::NoResult, S3ControlError> DeleteAccessPointForObjectLambdaOutcome;
typedef Aws::Utils::Outcome<Aws::NoResult, S3ControlError> DeleteAccessPointPolicyOutcome;
typedef Aws::Utils::Outcome<Aws::NoResult, S3ControlError> DeleteAccessPointPolicyForObjectLambdaOutcome;
typedef Aws::Utils::Outcome<Aws::NoResult, S3ControlError> DeleteAccessPointScopeOutcome;
typedef Aws::Utils::Outcome<Aws::NoResult, S3ControlError> DeleteBucketOutcome;
typedef Aws::Utils::Outcome<Aws::NoResult, S3ControlError> DeleteBucketLifecycleConfigurationOutcome;
typedef Aws::Utils::Outcome<Aws::NoResult, S3ControlError> DeleteBucketPolicyOutcome;
typedef Aws::Utils::Outcome<Aws::NoResult, S3ControlError> DeleteBucketReplicationOutcome;
typedef Aws::Utils::Outcome<Aws::NoResult, S3ControlError> DeleteBucketTaggingOutcome;
typedef Aws::Utils::Outcome<DeleteJobTaggingResult, S3ControlError> DeleteJobTaggingOutcome;
typedef Aws::Utils::Outcome<DeleteMultiRegionAccessPointResult, S3ControlError> DeleteMultiRegionAccessPointOutcome;
typedef Aws::Utils::Outcome<Aws::NoResult, S3ControlError> DeletePublicAccessBlockOutcome;
typedef Aws::Utils::Outcome<Aws::NoResult, S3ControlError> DeleteStorageLensConfigurationOutcome;
typedef Aws::Utils::Outcome<DeleteStorageLensConfigurationTaggingResult, S3ControlError> DeleteStorageLensConfigurationTaggingOutcome;
typedef Aws::Utils::Outcome<Aws::NoResult, S3ControlError> DeleteStorageLensGroupOutcome;
typedef Aws::Utils::Outcome<DescribeJobResult, S3ControlError> DescribeJobOutcome;
typedef Aws::Utils::Outcome<DescribeMultiRegionAccessPointOperationResult, S3ControlError> DescribeMultiRegionAccessPointOperationOutcome;
typedef Aws::Utils::Outcome<Aws::NoResult, S3ControlError> DissociateAccessGrantsIdentityCenterOutcome;
typedef Aws::Utils::Outcome<GetAccessGrantResult, S3ControlError> GetAccessGrantOutcome;
typedef Aws::Utils::Outcome<GetAccessGrantsInstanceResult, S3ControlError> GetAccessGrantsInstanceOutcome;
typedef Aws::Utils::Outcome<GetAccessGrantsInstanceForPrefixResult, S3ControlError> GetAccessGrantsInstanceForPrefixOutcome;
typedef Aws::Utils::Outcome<GetAccessGrantsInstanceResourcePolicyResult, S3ControlError> GetAccessGrantsInstanceResourcePolicyOutcome;
typedef Aws::Utils::Outcome<GetAccessGrantsLocationResult, S3ControlError> GetAccessGrantsLocationOutcome;
typedef Aws::Utils::Outcome<GetAccessPointResult, S3ControlError> GetAccessPointOutcome;
typedef Aws::Utils::Outcome<GetAccessPointConfigurationForObjectLambdaResult, S3ControlError>
    GetAccessPointConfigurationForObjectLambdaOutcome;
typedef Aws::Utils::Outcome<GetAccessPointForObjectLambdaResult, S3ControlError> GetAccessPointForObjectLambdaOutcome;
typedef Aws::Utils::Outcome<GetAccessPointPolicyResult, S3ControlError> GetAccessPointPolicyOutcome;
typedef Aws::Utils::Outcome<GetAccessPointPolicyForObjectLambdaResult, S3ControlError> GetAccessPointPolicyForObjectLambdaOutcome;
typedef Aws::Utils::Outcome<GetAccessPointPolicyStatusResult, S3ControlError> GetAccessPointPolicyStatusOutcome;
typedef Aws::Utils::Outcome<GetAccessPointPolicyStatusForObjectLambdaResult, S3ControlError>
    GetAccessPointPolicyStatusForObjectLambdaOutcome;
typedef Aws::Utils::Outcome<GetAccessPointScopeResult, S3ControlError> GetAccessPointScopeOutcome;
typedef Aws::Utils::Outcome<GetBucketResult, S3ControlError> GetBucketOutcome;
typedef Aws::Utils::Outcome<GetBucketLifecycleConfigurationResult, S3ControlError> GetBucketLifecycleConfigurationOutcome;
typedef Aws::Utils::Outcome<GetBucketPolicyResult, S3ControlError> GetBucketPolicyOutcome;
typedef Aws::Utils::Outcome<GetBucketReplicationResult, S3ControlError> GetBucketReplicationOutcome;
typedef Aws::Utils::Outcome<GetBucketTaggingResult, S3ControlError> GetBucketTaggingOutcome;
typedef Aws::Utils::Outcome<GetBucketVersioningResult, S3ControlError> GetBucketVersioningOutcome;
typedef Aws::Utils::Outcome<GetDataAccessResult, S3ControlError> GetDataAccessOutcome;
typedef Aws::Utils::Outcome<GetJobTaggingResult, S3ControlError> GetJobTaggingOutcome;
typedef Aws::Utils::Outcome<GetMultiRegionAccessPointResult, S3ControlError> GetMultiRegionAccessPointOutcome;
typedef Aws::Utils::Outcome<GetMultiRegionAccessPointPolicyResult, S3ControlError> GetMultiRegionAccessPointPolicyOutcome;
typedef Aws::Utils::Outcome<GetMultiRegionAccessPointPolicyStatusResult, S3ControlError> GetMultiRegionAccessPointPolicyStatusOutcome;
typedef Aws::Utils::Outcome<GetMultiRegionAccessPointRoutesResult, S3ControlError> GetMultiRegionAccessPointRoutesOutcome;
typedef Aws::Utils::Outcome<GetPublicAccessBlockResult, S3ControlError> GetPublicAccessBlockOutcome;
typedef Aws::Utils::Outcome<GetStorageLensConfigurationResult, S3ControlError> GetStorageLensConfigurationOutcome;
typedef Aws::Utils::Outcome<GetStorageLensConfigurationTaggingResult, S3ControlError> GetStorageLensConfigurationTaggingOutcome;
typedef Aws::Utils::Outcome<GetStorageLensGroupResult, S3ControlError> GetStorageLensGroupOutcome;
typedef Aws::Utils::Outcome<ListAccessGrantsResult, S3ControlError> ListAccessGrantsOutcome;
typedef Aws::Utils::Outcome<ListAccessGrantsInstancesResult, S3ControlError> ListAccessGrantsInstancesOutcome;
typedef Aws::Utils::Outcome<ListAccessGrantsLocationsResult, S3ControlError> ListAccessGrantsLocationsOutcome;
typedef Aws::Utils::Outcome<ListAccessPointsResult, S3ControlError> ListAccessPointsOutcome;
typedef Aws::Utils::Outcome<ListAccessPointsForDirectoryBucketsResult, S3ControlError> ListAccessPointsForDirectoryBucketsOutcome;
typedef Aws::Utils::Outcome<ListAccessPointsForObjectLambdaResult, S3ControlError> ListAccessPointsForObjectLambdaOutcome;
typedef Aws::Utils::Outcome<ListCallerAccessGrantsResult, S3ControlError> ListCallerAccessGrantsOutcome;
typedef Aws::Utils::Outcome<ListJobsResult, S3ControlError> ListJobsOutcome;
typedef Aws::Utils::Outcome<ListMultiRegionAccessPointsResult, S3ControlError> ListMultiRegionAccessPointsOutcome;
typedef Aws::Utils::Outcome<ListRegionalBucketsResult, S3ControlError> ListRegionalBucketsOutcome;
typedef Aws::Utils::Outcome<ListStorageLensConfigurationsResult, S3ControlError> ListStorageLensConfigurationsOutcome;
typedef Aws::Utils::Outcome<ListStorageLensGroupsResult, S3ControlError> ListStorageLensGroupsOutcome;
typedef Aws::Utils::Outcome<ListTagsForResourceResult, S3ControlError> ListTagsForResourceOutcome;
typedef Aws::Utils::Outcome<PutAccessGrantsInstanceResourcePolicyResult, S3ControlError> PutAccessGrantsInstanceResourcePolicyOutcome;
typedef Aws::Utils::Outcome<Aws::NoResult, S3ControlError> PutAccessPointConfigurationForObjectLambdaOutcome;
typedef Aws::Utils::Outcome<Aws::NoResult, S3ControlError> PutAccessPointPolicyOutcome;
typedef Aws::Utils::Outcome<Aws::NoResult, S3ControlError> PutAccessPointPolicyForObjectLambdaOutcome;
typedef Aws::Utils::Outcome<Aws::NoResult, S3ControlError> PutAccessPointScopeOutcome;
typedef Aws::Utils::Outcome<Aws::NoResult, S3ControlError> PutBucketLifecycleConfigurationOutcome;
typedef Aws::Utils::Outcome<Aws::NoResult, S3ControlError> PutBucketPolicyOutcome;
typedef Aws::Utils::Outcome<Aws::NoResult, S3ControlError> PutBucketReplicationOutcome;
typedef Aws::Utils::Outcome<Aws::NoResult, S3ControlError> PutBucketTaggingOutcome;
typedef Aws::Utils::Outcome<Aws::NoResult, S3ControlError> PutBucketVersioningOutcome;
typedef Aws::Utils::Outcome<PutJobTaggingResult, S3ControlError> PutJobTaggingOutcome;
typedef Aws::Utils::Outcome<PutMultiRegionAccessPointPolicyResult, S3ControlError> PutMultiRegionAccessPointPolicyOutcome;
typedef Aws::Utils::Outcome<Aws::NoResult, S3ControlError> PutPublicAccessBlockOutcome;
typedef Aws::Utils::Outcome<Aws::NoResult, S3ControlError> PutStorageLensConfigurationOutcome;
typedef Aws::Utils::Outcome<PutStorageLensConfigurationTaggingResult, S3ControlError> PutStorageLensConfigurationTaggingOutcome;
typedef Aws::Utils::Outcome<SubmitMultiRegionAccessPointRoutesResult, S3ControlError> SubmitMultiRegionAccessPointRoutesOutcome;
typedef Aws::Utils::Outcome<TagResourceResult, S3ControlError> TagResourceOutcome;
typedef Aws::Utils::Outcome<UntagResourceResult, S3ControlError> UntagResourceOutcome;
typedef Aws::Utils::Outcome<UpdateAccessGrantsLocationResult, S3ControlError> UpdateAccessGrantsLocationOutcome;
typedef Aws::Utils::Outcome<UpdateJobPriorityResult, S3ControlError> UpdateJobPriorityOutcome;
typedef Aws::Utils::Outcome<UpdateJobStatusResult, S3ControlError> UpdateJobStatusOutcome;
typedef Aws::Utils::Outcome<Aws::NoResult, S3ControlError> UpdateStorageLensGroupOutcome;
/* End of service model Outcome class definitions */

/* Service model Outcome callable definitions */
typedef std::future<AssociateAccessGrantsIdentityCenterOutcome> AssociateAccessGrantsIdentityCenterOutcomeCallable;
typedef std::future<CreateAccessGrantOutcome> CreateAccessGrantOutcomeCallable;
typedef std::future<CreateAccessGrantsInstanceOutcome> CreateAccessGrantsInstanceOutcomeCallable;
typedef std::future<CreateAccessGrantsLocationOutcome> CreateAccessGrantsLocationOutcomeCallable;
typedef std::future<CreateAccessPointOutcome> CreateAccessPointOutcomeCallable;
typedef std::future<CreateAccessPointForObjectLambdaOutcome> CreateAccessPointForObjectLambdaOutcomeCallable;
typedef std::future<CreateBucketOutcome> CreateBucketOutcomeCallable;
typedef std::future<CreateJobOutcome> CreateJobOutcomeCallable;
typedef std::future<CreateMultiRegionAccessPointOutcome> CreateMultiRegionAccessPointOutcomeCallable;
typedef std::future<CreateStorageLensGroupOutcome> CreateStorageLensGroupOutcomeCallable;
typedef std::future<DeleteAccessGrantOutcome> DeleteAccessGrantOutcomeCallable;
typedef std::future<DeleteAccessGrantsInstanceOutcome> DeleteAccessGrantsInstanceOutcomeCallable;
typedef std::future<DeleteAccessGrantsInstanceResourcePolicyOutcome> DeleteAccessGrantsInstanceResourcePolicyOutcomeCallable;
typedef std::future<DeleteAccessGrantsLocationOutcome> DeleteAccessGrantsLocationOutcomeCallable;
typedef std::future<DeleteAccessPointOutcome> DeleteAccessPointOutcomeCallable;
typedef std::future<DeleteAccessPointForObjectLambdaOutcome> DeleteAccessPointForObjectLambdaOutcomeCallable;
typedef std::future<DeleteAccessPointPolicyOutcome> DeleteAccessPointPolicyOutcomeCallable;
typedef std::future<DeleteAccessPointPolicyForObjectLambdaOutcome> DeleteAccessPointPolicyForObjectLambdaOutcomeCallable;
typedef std::future<DeleteAccessPointScopeOutcome> DeleteAccessPointScopeOutcomeCallable;
typedef std::future<DeleteBucketOutcome> DeleteBucketOutcomeCallable;
typedef std::future<DeleteBucketLifecycleConfigurationOutcome> DeleteBucketLifecycleConfigurationOutcomeCallable;
typedef std::future<DeleteBucketPolicyOutcome> DeleteBucketPolicyOutcomeCallable;
typedef std::future<DeleteBucketReplicationOutcome> DeleteBucketReplicationOutcomeCallable;
typedef std::future<DeleteBucketTaggingOutcome> DeleteBucketTaggingOutcomeCallable;
typedef std::future<DeleteJobTaggingOutcome> DeleteJobTaggingOutcomeCallable;
typedef std::future<DeleteMultiRegionAccessPointOutcome> DeleteMultiRegionAccessPointOutcomeCallable;
typedef std::future<DeletePublicAccessBlockOutcome> DeletePublicAccessBlockOutcomeCallable;
typedef std::future<DeleteStorageLensConfigurationOutcome> DeleteStorageLensConfigurationOutcomeCallable;
typedef std::future<DeleteStorageLensConfigurationTaggingOutcome> DeleteStorageLensConfigurationTaggingOutcomeCallable;
typedef std::future<DeleteStorageLensGroupOutcome> DeleteStorageLensGroupOutcomeCallable;
typedef std::future<DescribeJobOutcome> DescribeJobOutcomeCallable;
typedef std::future<DescribeMultiRegionAccessPointOperationOutcome> DescribeMultiRegionAccessPointOperationOutcomeCallable;
typedef std::future<DissociateAccessGrantsIdentityCenterOutcome> DissociateAccessGrantsIdentityCenterOutcomeCallable;
typedef std::future<GetAccessGrantOutcome> GetAccessGrantOutcomeCallable;
typedef std::future<GetAccessGrantsInstanceOutcome> GetAccessGrantsInstanceOutcomeCallable;
typedef std::future<GetAccessGrantsInstanceForPrefixOutcome> GetAccessGrantsInstanceForPrefixOutcomeCallable;
typedef std::future<GetAccessGrantsInstanceResourcePolicyOutcome> GetAccessGrantsInstanceResourcePolicyOutcomeCallable;
typedef std::future<GetAccessGrantsLocationOutcome> GetAccessGrantsLocationOutcomeCallable;
typedef std::future<GetAccessPointOutcome> GetAccessPointOutcomeCallable;
typedef std::future<GetAccessPointConfigurationForObjectLambdaOutcome> GetAccessPointConfigurationForObjectLambdaOutcomeCallable;
typedef std::future<GetAccessPointForObjectLambdaOutcome> GetAccessPointForObjectLambdaOutcomeCallable;
typedef std::future<GetAccessPointPolicyOutcome> GetAccessPointPolicyOutcomeCallable;
typedef std::future<GetAccessPointPolicyForObjectLambdaOutcome> GetAccessPointPolicyForObjectLambdaOutcomeCallable;
typedef std::future<GetAccessPointPolicyStatusOutcome> GetAccessPointPolicyStatusOutcomeCallable;
typedef std::future<GetAccessPointPolicyStatusForObjectLambdaOutcome> GetAccessPointPolicyStatusForObjectLambdaOutcomeCallable;
typedef std::future<GetAccessPointScopeOutcome> GetAccessPointScopeOutcomeCallable;
typedef std::future<GetBucketOutcome> GetBucketOutcomeCallable;
typedef std::future<GetBucketLifecycleConfigurationOutcome> GetBucketLifecycleConfigurationOutcomeCallable;
typedef std::future<GetBucketPolicyOutcome> GetBucketPolicyOutcomeCallable;
typedef std::future<GetBucketReplicationOutcome> GetBucketReplicationOutcomeCallable;
typedef std::future<GetBucketTaggingOutcome> GetBucketTaggingOutcomeCallable;
typedef std::future<GetBucketVersioningOutcome> GetBucketVersioningOutcomeCallable;
typedef std::future<GetDataAccessOutcome> GetDataAccessOutcomeCallable;
typedef std::future<GetJobTaggingOutcome> GetJobTaggingOutcomeCallable;
typedef std::future<GetMultiRegionAccessPointOutcome> GetMultiRegionAccessPointOutcomeCallable;
typedef std::future<GetMultiRegionAccessPointPolicyOutcome> GetMultiRegionAccessPointPolicyOutcomeCallable;
typedef std::future<GetMultiRegionAccessPointPolicyStatusOutcome> GetMultiRegionAccessPointPolicyStatusOutcomeCallable;
typedef std::future<GetMultiRegionAccessPointRoutesOutcome> GetMultiRegionAccessPointRoutesOutcomeCallable;
typedef std::future<GetPublicAccessBlockOutcome> GetPublicAccessBlockOutcomeCallable;
typedef std::future<GetStorageLensConfigurationOutcome> GetStorageLensConfigurationOutcomeCallable;
typedef std::future<GetStorageLensConfigurationTaggingOutcome> GetStorageLensConfigurationTaggingOutcomeCallable;
typedef std::future<GetStorageLensGroupOutcome> GetStorageLensGroupOutcomeCallable;
typedef std::future<ListAccessGrantsOutcome> ListAccessGrantsOutcomeCallable;
typedef std::future<ListAccessGrantsInstancesOutcome> ListAccessGrantsInstancesOutcomeCallable;
typedef std::future<ListAccessGrantsLocationsOutcome> ListAccessGrantsLocationsOutcomeCallable;
typedef std::future<ListAccessPointsOutcome> ListAccessPointsOutcomeCallable;
typedef std::future<ListAccessPointsForDirectoryBucketsOutcome> ListAccessPointsForDirectoryBucketsOutcomeCallable;
typedef std::future<ListAccessPointsForObjectLambdaOutcome> ListAccessPointsForObjectLambdaOutcomeCallable;
typedef std::future<ListCallerAccessGrantsOutcome> ListCallerAccessGrantsOutcomeCallable;
typedef std::future<ListJobsOutcome> ListJobsOutcomeCallable;
typedef std::future<ListMultiRegionAccessPointsOutcome> ListMultiRegionAccessPointsOutcomeCallable;
typedef std::future<ListRegionalBucketsOutcome> ListRegionalBucketsOutcomeCallable;
typedef std::future<ListStorageLensConfigurationsOutcome> ListStorageLensConfigurationsOutcomeCallable;
typedef std::future<ListStorageLensGroupsOutcome> ListStorageLensGroupsOutcomeCallable;
typedef std::future<ListTagsForResourceOutcome> ListTagsForResourceOutcomeCallable;
typedef std::future<PutAccessGrantsInstanceResourcePolicyOutcome> PutAccessGrantsInstanceResourcePolicyOutcomeCallable;
typedef std::future<PutAccessPointConfigurationForObjectLambdaOutcome> PutAccessPointConfigurationForObjectLambdaOutcomeCallable;
typedef std::future<PutAccessPointPolicyOutcome> PutAccessPointPolicyOutcomeCallable;
typedef std::future<PutAccessPointPolicyForObjectLambdaOutcome> PutAccessPointPolicyForObjectLambdaOutcomeCallable;
typedef std::future<PutAccessPointScopeOutcome> PutAccessPointScopeOutcomeCallable;
typedef std::future<PutBucketLifecycleConfigurationOutcome> PutBucketLifecycleConfigurationOutcomeCallable;
typedef std::future<PutBucketPolicyOutcome> PutBucketPolicyOutcomeCallable;
typedef std::future<PutBucketReplicationOutcome> PutBucketReplicationOutcomeCallable;
typedef std::future<PutBucketTaggingOutcome> PutBucketTaggingOutcomeCallable;
typedef std::future<PutBucketVersioningOutcome> PutBucketVersioningOutcomeCallable;
typedef std::future<PutJobTaggingOutcome> PutJobTaggingOutcomeCallable;
typedef std::future<PutMultiRegionAccessPointPolicyOutcome> PutMultiRegionAccessPointPolicyOutcomeCallable;
typedef std::future<PutPublicAccessBlockOutcome> PutPublicAccessBlockOutcomeCallable;
typedef std::future<PutStorageLensConfigurationOutcome> PutStorageLensConfigurationOutcomeCallable;
typedef std::future<PutStorageLensConfigurationTaggingOutcome> PutStorageLensConfigurationTaggingOutcomeCallable;
typedef std::future<SubmitMultiRegionAccessPointRoutesOutcome> SubmitMultiRegionAccessPointRoutesOutcomeCallable;
typedef std::future<TagResourceOutcome> TagResourceOutcomeCallable;
typedef std::future<UntagResourceOutcome> UntagResourceOutcomeCallable;
typedef std::future<UpdateAccessGrantsLocationOutcome> UpdateAccessGrantsLocationOutcomeCallable;
typedef std::future<UpdateJobPriorityOutcome> UpdateJobPriorityOutcomeCallable;
typedef std::future<UpdateJobStatusOutcome> UpdateJobStatusOutcomeCallable;
typedef std::future<UpdateStorageLensGroupOutcome> UpdateStorageLensGroupOutcomeCallable;
/* End of service model Outcome callable definitions */
}  // namespace Model

class S3ControlClient;

/* Service model async handlers definitions */
typedef std::function<void(const S3ControlClient*, const Model::AssociateAccessGrantsIdentityCenterRequest&,
                           const Model::AssociateAccessGrantsIdentityCenterOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    AssociateAccessGrantsIdentityCenterResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::CreateAccessGrantRequest&, const Model::CreateAccessGrantOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    CreateAccessGrantResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::CreateAccessGrantsInstanceRequest&,
                           const Model::CreateAccessGrantsInstanceOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    CreateAccessGrantsInstanceResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::CreateAccessGrantsLocationRequest&,
                           const Model::CreateAccessGrantsLocationOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    CreateAccessGrantsLocationResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::CreateAccessPointRequest&, const Model::CreateAccessPointOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    CreateAccessPointResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::CreateAccessPointForObjectLambdaRequest&,
                           const Model::CreateAccessPointForObjectLambdaOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    CreateAccessPointForObjectLambdaResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::CreateBucketRequest&, const Model::CreateBucketOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    CreateBucketResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::CreateJobRequest&, const Model::CreateJobOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    CreateJobResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::CreateMultiRegionAccessPointRequest&,
                           const Model::CreateMultiRegionAccessPointOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    CreateMultiRegionAccessPointResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::CreateStorageLensGroupRequest&, const Model::CreateStorageLensGroupOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    CreateStorageLensGroupResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::DeleteAccessGrantRequest&, const Model::DeleteAccessGrantOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    DeleteAccessGrantResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::DeleteAccessGrantsInstanceRequest&,
                           const Model::DeleteAccessGrantsInstanceOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    DeleteAccessGrantsInstanceResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::DeleteAccessGrantsInstanceResourcePolicyRequest&,
                           const Model::DeleteAccessGrantsInstanceResourcePolicyOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    DeleteAccessGrantsInstanceResourcePolicyResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::DeleteAccessGrantsLocationRequest&,
                           const Model::DeleteAccessGrantsLocationOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    DeleteAccessGrantsLocationResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::DeleteAccessPointRequest&, const Model::DeleteAccessPointOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    DeleteAccessPointResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::DeleteAccessPointForObjectLambdaRequest&,
                           const Model::DeleteAccessPointForObjectLambdaOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    DeleteAccessPointForObjectLambdaResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::DeleteAccessPointPolicyRequest&,
                           const Model::DeleteAccessPointPolicyOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    DeleteAccessPointPolicyResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::DeleteAccessPointPolicyForObjectLambdaRequest&,
                           const Model::DeleteAccessPointPolicyForObjectLambdaOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    DeleteAccessPointPolicyForObjectLambdaResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::DeleteAccessPointScopeRequest&, const Model::DeleteAccessPointScopeOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    DeleteAccessPointScopeResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::DeleteBucketRequest&, const Model::DeleteBucketOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    DeleteBucketResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::DeleteBucketLifecycleConfigurationRequest&,
                           const Model::DeleteBucketLifecycleConfigurationOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    DeleteBucketLifecycleConfigurationResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::DeleteBucketPolicyRequest&, const Model::DeleteBucketPolicyOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    DeleteBucketPolicyResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::DeleteBucketReplicationRequest&,
                           const Model::DeleteBucketReplicationOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    DeleteBucketReplicationResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::DeleteBucketTaggingRequest&, const Model::DeleteBucketTaggingOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    DeleteBucketTaggingResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::DeleteJobTaggingRequest&, const Model::DeleteJobTaggingOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    DeleteJobTaggingResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::DeleteMultiRegionAccessPointRequest&,
                           const Model::DeleteMultiRegionAccessPointOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    DeleteMultiRegionAccessPointResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::DeletePublicAccessBlockRequest&,
                           const Model::DeletePublicAccessBlockOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    DeletePublicAccessBlockResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::DeleteStorageLensConfigurationRequest&,
                           const Model::DeleteStorageLensConfigurationOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    DeleteStorageLensConfigurationResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::DeleteStorageLensConfigurationTaggingRequest&,
                           const Model::DeleteStorageLensConfigurationTaggingOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    DeleteStorageLensConfigurationTaggingResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::DeleteStorageLensGroupRequest&, const Model::DeleteStorageLensGroupOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    DeleteStorageLensGroupResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::DescribeJobRequest&, const Model::DescribeJobOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    DescribeJobResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::DescribeMultiRegionAccessPointOperationRequest&,
                           const Model::DescribeMultiRegionAccessPointOperationOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    DescribeMultiRegionAccessPointOperationResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::DissociateAccessGrantsIdentityCenterRequest&,
                           const Model::DissociateAccessGrantsIdentityCenterOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    DissociateAccessGrantsIdentityCenterResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::GetAccessGrantRequest&, const Model::GetAccessGrantOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    GetAccessGrantResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::GetAccessGrantsInstanceRequest&,
                           const Model::GetAccessGrantsInstanceOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    GetAccessGrantsInstanceResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::GetAccessGrantsInstanceForPrefixRequest&,
                           const Model::GetAccessGrantsInstanceForPrefixOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    GetAccessGrantsInstanceForPrefixResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::GetAccessGrantsInstanceResourcePolicyRequest&,
                           const Model::GetAccessGrantsInstanceResourcePolicyOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    GetAccessGrantsInstanceResourcePolicyResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::GetAccessGrantsLocationRequest&,
                           const Model::GetAccessGrantsLocationOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    GetAccessGrantsLocationResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::GetAccessPointRequest&, const Model::GetAccessPointOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    GetAccessPointResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::GetAccessPointConfigurationForObjectLambdaRequest&,
                           const Model::GetAccessPointConfigurationForObjectLambdaOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    GetAccessPointConfigurationForObjectLambdaResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::GetAccessPointForObjectLambdaRequest&,
                           const Model::GetAccessPointForObjectLambdaOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    GetAccessPointForObjectLambdaResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::GetAccessPointPolicyRequest&, const Model::GetAccessPointPolicyOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    GetAccessPointPolicyResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::GetAccessPointPolicyForObjectLambdaRequest&,
                           const Model::GetAccessPointPolicyForObjectLambdaOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    GetAccessPointPolicyForObjectLambdaResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::GetAccessPointPolicyStatusRequest&,
                           const Model::GetAccessPointPolicyStatusOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    GetAccessPointPolicyStatusResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::GetAccessPointPolicyStatusForObjectLambdaRequest&,
                           const Model::GetAccessPointPolicyStatusForObjectLambdaOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    GetAccessPointPolicyStatusForObjectLambdaResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::GetAccessPointScopeRequest&, const Model::GetAccessPointScopeOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    GetAccessPointScopeResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::GetBucketRequest&, const Model::GetBucketOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    GetBucketResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::GetBucketLifecycleConfigurationRequest&,
                           const Model::GetBucketLifecycleConfigurationOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    GetBucketLifecycleConfigurationResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::GetBucketPolicyRequest&, const Model::GetBucketPolicyOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    GetBucketPolicyResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::GetBucketReplicationRequest&, const Model::GetBucketReplicationOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    GetBucketReplicationResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::GetBucketTaggingRequest&, const Model::GetBucketTaggingOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    GetBucketTaggingResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::GetBucketVersioningRequest&, const Model::GetBucketVersioningOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    GetBucketVersioningResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::GetDataAccessRequest&, const Model::GetDataAccessOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    GetDataAccessResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::GetJobTaggingRequest&, const Model::GetJobTaggingOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    GetJobTaggingResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::GetMultiRegionAccessPointRequest&,
                           const Model::GetMultiRegionAccessPointOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    GetMultiRegionAccessPointResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::GetMultiRegionAccessPointPolicyRequest&,
                           const Model::GetMultiRegionAccessPointPolicyOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    GetMultiRegionAccessPointPolicyResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::GetMultiRegionAccessPointPolicyStatusRequest&,
                           const Model::GetMultiRegionAccessPointPolicyStatusOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    GetMultiRegionAccessPointPolicyStatusResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::GetMultiRegionAccessPointRoutesRequest&,
                           const Model::GetMultiRegionAccessPointRoutesOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    GetMultiRegionAccessPointRoutesResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::GetPublicAccessBlockRequest&, const Model::GetPublicAccessBlockOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    GetPublicAccessBlockResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::GetStorageLensConfigurationRequest&,
                           const Model::GetStorageLensConfigurationOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    GetStorageLensConfigurationResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::GetStorageLensConfigurationTaggingRequest&,
                           const Model::GetStorageLensConfigurationTaggingOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    GetStorageLensConfigurationTaggingResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::GetStorageLensGroupRequest&, const Model::GetStorageLensGroupOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    GetStorageLensGroupResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::ListAccessGrantsRequest&, const Model::ListAccessGrantsOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    ListAccessGrantsResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::ListAccessGrantsInstancesRequest&,
                           const Model::ListAccessGrantsInstancesOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    ListAccessGrantsInstancesResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::ListAccessGrantsLocationsRequest&,
                           const Model::ListAccessGrantsLocationsOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    ListAccessGrantsLocationsResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::ListAccessPointsRequest&, const Model::ListAccessPointsOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    ListAccessPointsResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::ListAccessPointsForDirectoryBucketsRequest&,
                           const Model::ListAccessPointsForDirectoryBucketsOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    ListAccessPointsForDirectoryBucketsResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::ListAccessPointsForObjectLambdaRequest&,
                           const Model::ListAccessPointsForObjectLambdaOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    ListAccessPointsForObjectLambdaResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::ListCallerAccessGrantsRequest&, const Model::ListCallerAccessGrantsOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    ListCallerAccessGrantsResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::ListJobsRequest&, const Model::ListJobsOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    ListJobsResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::ListMultiRegionAccessPointsRequest&,
                           const Model::ListMultiRegionAccessPointsOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    ListMultiRegionAccessPointsResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::ListRegionalBucketsRequest&, const Model::ListRegionalBucketsOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    ListRegionalBucketsResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::ListStorageLensConfigurationsRequest&,
                           const Model::ListStorageLensConfigurationsOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    ListStorageLensConfigurationsResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::ListStorageLensGroupsRequest&, const Model::ListStorageLensGroupsOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    ListStorageLensGroupsResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::ListTagsForResourceRequest&, const Model::ListTagsForResourceOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    ListTagsForResourceResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::PutAccessGrantsInstanceResourcePolicyRequest&,
                           const Model::PutAccessGrantsInstanceResourcePolicyOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    PutAccessGrantsInstanceResourcePolicyResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::PutAccessPointConfigurationForObjectLambdaRequest&,
                           const Model::PutAccessPointConfigurationForObjectLambdaOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    PutAccessPointConfigurationForObjectLambdaResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::PutAccessPointPolicyRequest&, const Model::PutAccessPointPolicyOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    PutAccessPointPolicyResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::PutAccessPointPolicyForObjectLambdaRequest&,
                           const Model::PutAccessPointPolicyForObjectLambdaOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    PutAccessPointPolicyForObjectLambdaResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::PutAccessPointScopeRequest&, const Model::PutAccessPointScopeOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    PutAccessPointScopeResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::PutBucketLifecycleConfigurationRequest&,
                           const Model::PutBucketLifecycleConfigurationOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    PutBucketLifecycleConfigurationResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::PutBucketPolicyRequest&, const Model::PutBucketPolicyOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    PutBucketPolicyResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::PutBucketReplicationRequest&, const Model::PutBucketReplicationOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    PutBucketReplicationResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::PutBucketTaggingRequest&, const Model::PutBucketTaggingOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    PutBucketTaggingResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::PutBucketVersioningRequest&, const Model::PutBucketVersioningOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    PutBucketVersioningResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::PutJobTaggingRequest&, const Model::PutJobTaggingOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    PutJobTaggingResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::PutMultiRegionAccessPointPolicyRequest&,
                           const Model::PutMultiRegionAccessPointPolicyOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    PutMultiRegionAccessPointPolicyResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::PutPublicAccessBlockRequest&, const Model::PutPublicAccessBlockOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    PutPublicAccessBlockResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::PutStorageLensConfigurationRequest&,
                           const Model::PutStorageLensConfigurationOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    PutStorageLensConfigurationResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::PutStorageLensConfigurationTaggingRequest&,
                           const Model::PutStorageLensConfigurationTaggingOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    PutStorageLensConfigurationTaggingResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::SubmitMultiRegionAccessPointRoutesRequest&,
                           const Model::SubmitMultiRegionAccessPointRoutesOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    SubmitMultiRegionAccessPointRoutesResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::TagResourceRequest&, const Model::TagResourceOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    TagResourceResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::UntagResourceRequest&, const Model::UntagResourceOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    UntagResourceResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::UpdateAccessGrantsLocationRequest&,
                           const Model::UpdateAccessGrantsLocationOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    UpdateAccessGrantsLocationResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::UpdateJobPriorityRequest&, const Model::UpdateJobPriorityOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    UpdateJobPriorityResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::UpdateJobStatusRequest&, const Model::UpdateJobStatusOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    UpdateJobStatusResponseReceivedHandler;
typedef std::function<void(const S3ControlClient*, const Model::UpdateStorageLensGroupRequest&, const Model::UpdateStorageLensGroupOutcome&,
                           const std::shared_ptr<const Aws::Client::AsyncCallerContext>&)>
    UpdateStorageLensGroupResponseReceivedHandler;
/* End of service model async handlers definitions */
}  // namespace S3Control
}  // namespace Aws
