<?php

namespace Aws\ApiGateway;

use Aws\AwsClient;
use Aws\CommandInterface;
use Aws\Result;
use GuzzleHttp\Promise\Promise;
use Psr\Http\Message\RequestInterface;

/**
 * This client is used to interact with the **AWS API Gateway** service.
 *
 * @method Result createApiKey( array $args = [] )
 * @method Promise createApiKeyAsync( array $args = [] )
 * @method Result createAuthorizer( array $args = [] )
 * @method Promise createAuthorizerAsync( array $args = [] )
 * @method Result createBasePathMapping( array $args = [] )
 * @method Promise createBasePathMappingAsync( array $args = [] )
 * @method Result createDeployment( array $args = [] )
 * @method Promise createDeploymentAsync( array $args = [] )
 * @method Result createDocumentationPart( array $args = [] )
 * @method Promise createDocumentationPartAsync( array $args = [] )
 * @method Result createDocumentationVersion( array $args = [] )
 * @method Promise createDocumentationVersionAsync( array $args = [] )
 * @method Result createDomainName( array $args = [] )
 * @method Promise createDomainNameAsync( array $args = [] )
 * @method Result createModel( array $args = [] )
 * @method Promise createModelAsync( array $args = [] )
 * @method Result createRequestValidator( array $args = [] )
 * @method Promise createRequestValidatorAsync( array $args = [] )
 * @method Result createResource( array $args = [] )
 * @method Promise createResourceAsync( array $args = [] )
 * @method Result createRestApi( array $args = [] )
 * @method Promise createRestApiAsync( array $args = [] )
 * @method Result createStage( array $args = [] )
 * @method Promise createStageAsync( array $args = [] )
 * @method Result createUsagePlan( array $args = [] )
 * @method Promise createUsagePlanAsync( array $args = [] )
 * @method Result createUsagePlanKey( array $args = [] )
 * @method Promise createUsagePlanKeyAsync( array $args = [] )
 * @method Result createVpcLink( array $args = [] )
 * @method Promise createVpcLinkAsync( array $args = [] )
 * @method Result deleteApiKey( array $args = [] )
 * @method Promise deleteApiKeyAsync( array $args = [] )
 * @method Result deleteAuthorizer( array $args = [] )
 * @method Promise deleteAuthorizerAsync( array $args = [] )
 * @method Result deleteBasePathMapping( array $args = [] )
 * @method Promise deleteBasePathMappingAsync( array $args = [] )
 * @method Result deleteClientCertificate( array $args = [] )
 * @method Promise deleteClientCertificateAsync( array $args = [] )
 * @method Result deleteDeployment( array $args = [] )
 * @method Promise deleteDeploymentAsync( array $args = [] )
 * @method Result deleteDocumentationPart( array $args = [] )
 * @method Promise deleteDocumentationPartAsync( array $args = [] )
 * @method Result deleteDocumentationVersion( array $args = [] )
 * @method Promise deleteDocumentationVersionAsync( array $args = [] )
 * @method Result deleteDomainName( array $args = [] )
 * @method Promise deleteDomainNameAsync( array $args = [] )
 * @method Result deleteGatewayResponse( array $args = [] )
 * @method Promise deleteGatewayResponseAsync( array $args = [] )
 * @method Result deleteIntegration( array $args = [] )
 * @method Promise deleteIntegrationAsync( array $args = [] )
 * @method Result deleteIntegrationResponse( array $args = [] )
 * @method Promise deleteIntegrationResponseAsync( array $args = [] )
 * @method Result deleteMethod( array $args = [] )
 * @method Promise deleteMethodAsync( array $args = [] )
 * @method Result deleteMethodResponse( array $args = [] )
 * @method Promise deleteMethodResponseAsync( array $args = [] )
 * @method Result deleteModel( array $args = [] )
 * @method Promise deleteModelAsync( array $args = [] )
 * @method Result deleteRequestValidator( array $args = [] )
 * @method Promise deleteRequestValidatorAsync( array $args = [] )
 * @method Result deleteResource( array $args = [] )
 * @method Promise deleteResourceAsync( array $args = [] )
 * @method Result deleteRestApi( array $args = [] )
 * @method Promise deleteRestApiAsync( array $args = [] )
 * @method Result deleteStage( array $args = [] )
 * @method Promise deleteStageAsync( array $args = [] )
 * @method Result deleteUsagePlan( array $args = [] )
 * @method Promise deleteUsagePlanAsync( array $args = [] )
 * @method Result deleteUsagePlanKey( array $args = [] )
 * @method Promise deleteUsagePlanKeyAsync( array $args = [] )
 * @method Result deleteVpcLink( array $args = [] )
 * @method Promise deleteVpcLinkAsync( array $args = [] )
 * @method Result flushStageAuthorizersCache( array $args = [] )
 * @method Promise flushStageAuthorizersCacheAsync( array $args = [] )
 * @method Result flushStageCache( array $args = [] )
 * @method Promise flushStageCacheAsync( array $args = [] )
 * @method Result generateClientCertificate( array $args = [] )
 * @method Promise generateClientCertificateAsync( array $args = [] )
 * @method Result getAccount( array $args = [] )
 * @method Promise getAccountAsync( array $args = [] )
 * @method Result getApiKey( array $args = [] )
 * @method Promise getApiKeyAsync( array $args = [] )
 * @method Result getApiKeys( array $args = [] )
 * @method Promise getApiKeysAsync( array $args = [] )
 * @method Result getAuthorizer( array $args = [] )
 * @method Promise getAuthorizerAsync( array $args = [] )
 * @method Result getAuthorizers( array $args = [] )
 * @method Promise getAuthorizersAsync( array $args = [] )
 * @method Result getBasePathMapping( array $args = [] )
 * @method Promise getBasePathMappingAsync( array $args = [] )
 * @method Result getBasePathMappings( array $args = [] )
 * @method Promise getBasePathMappingsAsync( array $args = [] )
 * @method Result getClientCertificate( array $args = [] )
 * @method Promise getClientCertificateAsync( array $args = [] )
 * @method Result getClientCertificates( array $args = [] )
 * @method Promise getClientCertificatesAsync( array $args = [] )
 * @method Result getDeployment( array $args = [] )
 * @method Promise getDeploymentAsync( array $args = [] )
 * @method Result getDeployments( array $args = [] )
 * @method Promise getDeploymentsAsync( array $args = [] )
 * @method Result getDocumentationPart( array $args = [] )
 * @method Promise getDocumentationPartAsync( array $args = [] )
 * @method Result getDocumentationParts( array $args = [] )
 * @method Promise getDocumentationPartsAsync( array $args = [] )
 * @method Result getDocumentationVersion( array $args = [] )
 * @method Promise getDocumentationVersionAsync( array $args = [] )
 * @method Result getDocumentationVersions( array $args = [] )
 * @method Promise getDocumentationVersionsAsync( array $args = [] )
 * @method Result getDomainName( array $args = [] )
 * @method Promise getDomainNameAsync( array $args = [] )
 * @method Result getDomainNames( array $args = [] )
 * @method Promise getDomainNamesAsync( array $args = [] )
 * @method Result getExport( array $args = [] )
 * @method Promise getExportAsync( array $args = [] )
 * @method Result getGatewayResponse( array $args = [] )
 * @method Promise getGatewayResponseAsync( array $args = [] )
 * @method Result getGatewayResponses( array $args = [] )
 * @method Promise getGatewayResponsesAsync( array $args = [] )
 * @method Result getIntegration( array $args = [] )
 * @method Promise getIntegrationAsync( array $args = [] )
 * @method Result getIntegrationResponse( array $args = [] )
 * @method Promise getIntegrationResponseAsync( array $args = [] )
 * @method Result getMethod( array $args = [] )
 * @method Promise getMethodAsync( array $args = [] )
 * @method Result getMethodResponse( array $args = [] )
 * @method Promise getMethodResponseAsync( array $args = [] )
 * @method Result getModel( array $args = [] )
 * @method Promise getModelAsync( array $args = [] )
 * @method Result getModelTemplate( array $args = [] )
 * @method Promise getModelTemplateAsync( array $args = [] )
 * @method Result getModels( array $args = [] )
 * @method Promise getModelsAsync( array $args = [] )
 * @method Result getRequestValidator( array $args = [] )
 * @method Promise getRequestValidatorAsync( array $args = [] )
 * @method Result getRequestValidators( array $args = [] )
 * @method Promise getRequestValidatorsAsync( array $args = [] )
 * @method Result getResource( array $args = [] )
 * @method Promise getResourceAsync( array $args = [] )
 * @method Result getResources( array $args = [] )
 * @method Promise getResourcesAsync( array $args = [] )
 * @method Result getRestApi( array $args = [] )
 * @method Promise getRestApiAsync( array $args = [] )
 * @method Result getRestApis( array $args = [] )
 * @method Promise getRestApisAsync( array $args = [] )
 * @method Result getSdk( array $args = [] )
 * @method Promise getSdkAsync( array $args = [] )
 * @method Result getSdkType( array $args = [] )
 * @method Promise getSdkTypeAsync( array $args = [] )
 * @method Result getSdkTypes( array $args = [] )
 * @method Promise getSdkTypesAsync( array $args = [] )
 * @method Result getStage( array $args = [] )
 * @method Promise getStageAsync( array $args = [] )
 * @method Result getStages( array $args = [] )
 * @method Promise getStagesAsync( array $args = [] )
 * @method Result getTags( array $args = [] )
 * @method Promise getTagsAsync( array $args = [] )
 * @method Result getUsage( array $args = [] )
 * @method Promise getUsageAsync( array $args = [] )
 * @method Result getUsagePlan( array $args = [] )
 * @method Promise getUsagePlanAsync( array $args = [] )
 * @method Result getUsagePlanKey( array $args = [] )
 * @method Promise getUsagePlanKeyAsync( array $args = [] )
 * @method Result getUsagePlanKeys( array $args = [] )
 * @method Promise getUsagePlanKeysAsync( array $args = [] )
 * @method Result getUsagePlans( array $args = [] )
 * @method Promise getUsagePlansAsync( array $args = [] )
 * @method Result getVpcLink( array $args = [] )
 * @method Promise getVpcLinkAsync( array $args = [] )
 * @method Result getVpcLinks( array $args = [] )
 * @method Promise getVpcLinksAsync( array $args = [] )
 * @method Result importApiKeys( array $args = [] )
 * @method Promise importApiKeysAsync( array $args = [] )
 * @method Result importDocumentationParts( array $args = [] )
 * @method Promise importDocumentationPartsAsync( array $args = [] )
 * @method Result importRestApi( array $args = [] )
 * @method Promise importRestApiAsync( array $args = [] )
 * @method Result putGatewayResponse( array $args = [] )
 * @method Promise putGatewayResponseAsync( array $args = [] )
 * @method Result putIntegration( array $args = [] )
 * @method Promise putIntegrationAsync( array $args = [] )
 * @method Result putIntegrationResponse( array $args = [] )
 * @method Promise putIntegrationResponseAsync( array $args = [] )
 * @method Result putMethod( array $args = [] )
 * @method Promise putMethodAsync( array $args = [] )
 * @method Result putMethodResponse( array $args = [] )
 * @method Promise putMethodResponseAsync( array $args = [] )
 * @method Result putRestApi( array $args = [] )
 * @method Promise putRestApiAsync( array $args = [] )
 * @method Result tagResource( array $args = [] )
 * @method Promise tagResourceAsync( array $args = [] )
 * @method Result testInvokeAuthorizer( array $args = [] )
 * @method Promise testInvokeAuthorizerAsync( array $args = [] )
 * @method Result testInvokeMethod( array $args = [] )
 * @method Promise testInvokeMethodAsync( array $args = [] )
 * @method Result untagResource( array $args = [] )
 * @method Promise untagResourceAsync( array $args = [] )
 * @method Result updateAccount( array $args = [] )
 * @method Promise updateAccountAsync( array $args = [] )
 * @method Result updateApiKey( array $args = [] )
 * @method Promise updateApiKeyAsync( array $args = [] )
 * @method Result updateAuthorizer( array $args = [] )
 * @method Promise updateAuthorizerAsync( array $args = [] )
 * @method Result updateBasePathMapping( array $args = [] )
 * @method Promise updateBasePathMappingAsync( array $args = [] )
 * @method Result updateClientCertificate( array $args = [] )
 * @method Promise updateClientCertificateAsync( array $args = [] )
 * @method Result updateDeployment( array $args = [] )
 * @method Promise updateDeploymentAsync( array $args = [] )
 * @method Result updateDocumentationPart( array $args = [] )
 * @method Promise updateDocumentationPartAsync( array $args = [] )
 * @method Result updateDocumentationVersion( array $args = [] )
 * @method Promise updateDocumentationVersionAsync( array $args = [] )
 * @method Result updateDomainName( array $args = [] )
 * @method Promise updateDomainNameAsync( array $args = [] )
 * @method Result updateGatewayResponse( array $args = [] )
 * @method Promise updateGatewayResponseAsync( array $args = [] )
 * @method Result updateIntegration( array $args = [] )
 * @method Promise updateIntegrationAsync( array $args = [] )
 * @method Result updateIntegrationResponse( array $args = [] )
 * @method Promise updateIntegrationResponseAsync( array $args = [] )
 * @method Result updateMethod( array $args = [] )
 * @method Promise updateMethodAsync( array $args = [] )
 * @method Result updateMethodResponse( array $args = [] )
 * @method Promise updateMethodResponseAsync( array $args = [] )
 * @method Result updateModel( array $args = [] )
 * @method Promise updateModelAsync( array $args = [] )
 * @method Result updateRequestValidator( array $args = [] )
 * @method Promise updateRequestValidatorAsync( array $args = [] )
 * @method Result updateResource( array $args = [] )
 * @method Promise updateResourceAsync( array $args = [] )
 * @method Result updateRestApi( array $args = [] )
 * @method Promise updateRestApiAsync( array $args = [] )
 * @method Result updateStage( array $args = [] )
 * @method Promise updateStageAsync( array $args = [] )
 * @method Result updateUsage( array $args = [] )
 * @method Promise updateUsageAsync( array $args = [] )
 * @method Result updateUsagePlan( array $args = [] )
 * @method Promise updateUsagePlanAsync( array $args = [] )
 * @method Result updateVpcLink( array $args = [] )
 * @method Promise updateVpcLinkAsync( array $args = [] )
 */
class ApiGatewayClient extends AwsClient {
	public function __construct( array $args ) {
		parent::__construct( $args );
		$stack = $this->getHandlerList();
		$stack->appendBuild( [ __CLASS__, '_add_accept_header' ] );
	}

	public static function _add_accept_header( callable $handler ) {
		return function (
			CommandInterface $command,
			RequestInterface $request
		) use ( $handler ) {
			$request = $request->withHeader( 'Accept', 'application/json' );

			return $handler( $command, $request );
		};
	}
}
