"""Raw representations of every data type in the AWS ApiGateway service.

See Also:
    `AWS developer guide for ApiGateway
    <https://docs.aws.amazon.com/apigateway/latest/developerguide/index.html>`_

This file is automatically generated, and should not be directly edited.
"""

from attr import attrib
from attr import attrs

from ..core import ATTRSCONFIG
from ..core import Resource
from ..core import ResourceProperties
from ..core import create_object_converter

__all__ = [
    "Account",
    "AccountProperties",
    "ApiKey",
    "ApiKeyProperties",
    "Authorizer",
    "AuthorizerProperties",
    "BasePathMapping",
    "BasePathMappingProperties",
    "ClientCertificate",
    "ClientCertificateProperties",
    "Deployment",
    "DeploymentProperties",
    "DocumentationPart",
    "DocumentationPartProperties",
    "DocumentationVersion",
    "DocumentationVersionProperties",
    "DomainName",
    "DomainNameProperties",
    "GatewayResponse",
    "GatewayResponseProperties",
    "Method",
    "MethodProperties",
    "Model",
    "ModelProperties",
    "RequestValidator",
    "RequestValidatorProperties",
    "Resource",
    "ResourceProperties",
    "RestApi",
    "RestApiProperties",
    "Stage",
    "StageProperties",
    "UsagePlan",
    "UsagePlanProperties",
    "UsagePlanKey",
    "UsagePlanKeyProperties",
    "VpcLink",
    "VpcLinkProperties",
]


@attrs(**ATTRSCONFIG)
class AccountProperties(ResourceProperties):
    CloudWatchRoleArn = attrib(default=None)


@attrs(**ATTRSCONFIG)
class Account(Resource):
    """A Account for ApiGateway.

    See Also:
        `AWS Cloud Formation documentation for Account
        <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-account.html>`_
    """

    RESOURCE_TYPE = "AWS::ApiGateway::Account"

    Properties: AccountProperties = attrib(
        factory=AccountProperties,
        converter=create_object_converter(AccountProperties),
    )


@attrs(**ATTRSCONFIG)
class ApiKeyProperties(ResourceProperties):
    CustomerId = attrib(default=None)
    Description = attrib(default=None)
    Enabled = attrib(default=None)
    GenerateDistinctId = attrib(default=None)
    Name = attrib(default=None)
    StageKeys = attrib(default=None)
    Value = attrib(default=None)


@attrs(**ATTRSCONFIG)
class ApiKey(Resource):
    """A Api Key for ApiGateway.

    See Also:
        `AWS Cloud Formation documentation for ApiKey
        <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-apikey.html>`_
    """

    RESOURCE_TYPE = "AWS::ApiGateway::ApiKey"

    Properties: ApiKeyProperties = attrib(
        factory=ApiKeyProperties,
        converter=create_object_converter(ApiKeyProperties),
    )


@attrs(**ATTRSCONFIG)
class AuthorizerProperties(ResourceProperties):
    AuthorizerCredentials = attrib(default=None)
    AuthorizerResultTtlInSeconds = attrib(default=None)
    AuthorizerUri = attrib(default=None)
    AuthType = attrib(default=None)
    IdentitySource = attrib(default=None)
    IdentityValidationExpression = attrib(default=None)
    Name = attrib(default=None)
    ProviderARNs = attrib(default=None)
    RestApiId = attrib(default=None)
    Type = attrib(default=None)


@attrs(**ATTRSCONFIG)
class Authorizer(Resource):
    """A Authorizer for ApiGateway.

    See Also:
        `AWS Cloud Formation documentation for Authorizer
        <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-authorizer.html>`_
    """

    RESOURCE_TYPE = "AWS::ApiGateway::Authorizer"

    Properties: AuthorizerProperties = attrib(
        factory=AuthorizerProperties,
        converter=create_object_converter(AuthorizerProperties),
    )


@attrs(**ATTRSCONFIG)
class BasePathMappingProperties(ResourceProperties):
    BasePath = attrib(default=None)
    DomainName = attrib(default=None)
    RestApiId = attrib(default=None)
    Stage = attrib(default=None)


@attrs(**ATTRSCONFIG)
class BasePathMapping(Resource):
    """A Base Path Mapping for ApiGateway.

    See Also:
        `AWS Cloud Formation documentation for BasePathMapping
        <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-basepathmapping.html>`_
    """

    RESOURCE_TYPE = "AWS::ApiGateway::BasePathMapping"

    Properties: BasePathMappingProperties = attrib(
        factory=BasePathMappingProperties,
        converter=create_object_converter(BasePathMappingProperties),
    )


@attrs(**ATTRSCONFIG)
class ClientCertificateProperties(ResourceProperties):
    Description = attrib(default=None)


@attrs(**ATTRSCONFIG)
class ClientCertificate(Resource):
    """A Client Certificate for ApiGateway.

    See Also:
        `AWS Cloud Formation documentation for ClientCertificate
        <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-clientcertificate.html>`_
    """

    RESOURCE_TYPE = "AWS::ApiGateway::ClientCertificate"

    Properties: ClientCertificateProperties = attrib(
        factory=ClientCertificateProperties,
        converter=create_object_converter(ClientCertificateProperties),
    )


@attrs(**ATTRSCONFIG)
class DeploymentProperties(ResourceProperties):
    DeploymentCanarySettings = attrib(default=None)
    Description = attrib(default=None)
    RestApiId = attrib(default=None)
    StageDescription = attrib(default=None)
    StageName = attrib(default=None)


@attrs(**ATTRSCONFIG)
class Deployment(Resource):
    """A Deployment for ApiGateway.

    See Also:
        `AWS Cloud Formation documentation for Deployment
        <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-deployment.html>`_
    """

    RESOURCE_TYPE = "AWS::ApiGateway::Deployment"

    Properties: DeploymentProperties = attrib(
        factory=DeploymentProperties,
        converter=create_object_converter(DeploymentProperties),
    )


@attrs(**ATTRSCONFIG)
class DocumentationPartProperties(ResourceProperties):
    Location = attrib(default=None)
    Properties = attrib(default=None)
    RestApiId = attrib(default=None)


@attrs(**ATTRSCONFIG)
class DocumentationPart(Resource):
    """A Documentation Part for ApiGateway.

    See Also:
        `AWS Cloud Formation documentation for DocumentationPart
        <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-documentationpart.html>`_
    """

    RESOURCE_TYPE = "AWS::ApiGateway::DocumentationPart"

    Properties: DocumentationPartProperties = attrib(
        factory=DocumentationPartProperties,
        converter=create_object_converter(DocumentationPartProperties),
    )


@attrs(**ATTRSCONFIG)
class DocumentationVersionProperties(ResourceProperties):
    Description = attrib(default=None)
    DocumentationVersion = attrib(default=None)
    RestApiId = attrib(default=None)


@attrs(**ATTRSCONFIG)
class DocumentationVersion(Resource):
    """A Documentation Version for ApiGateway.

    See Also:
        `AWS Cloud Formation documentation for DocumentationVersion
        <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-documentationversion.html>`_
    """

    RESOURCE_TYPE = "AWS::ApiGateway::DocumentationVersion"

    Properties: DocumentationVersionProperties = attrib(
        factory=DocumentationVersionProperties,
        converter=create_object_converter(DocumentationVersionProperties),
    )


@attrs(**ATTRSCONFIG)
class DomainNameProperties(ResourceProperties):
    CertificateArn = attrib(default=None)
    DomainName = attrib(default=None)
    EndpointConfiguration = attrib(default=None)
    RegionalCertificateArn = attrib(default=None)


@attrs(**ATTRSCONFIG)
class DomainName(Resource):
    """A Domain Name for ApiGateway.

    See Also:
        `AWS Cloud Formation documentation for DomainName
        <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-domainname.html>`_
    """

    RESOURCE_TYPE = "AWS::ApiGateway::DomainName"

    Properties: DomainNameProperties = attrib(
        factory=DomainNameProperties,
        converter=create_object_converter(DomainNameProperties),
    )


@attrs(**ATTRSCONFIG)
class GatewayResponseProperties(ResourceProperties):
    ResponseParameters = attrib(default=None)
    ResponseTemplates = attrib(default=None)
    ResponseType = attrib(default=None)
    RestApiId = attrib(default=None)
    StatusCode = attrib(default=None)


@attrs(**ATTRSCONFIG)
class GatewayResponse(Resource):
    """A Gateway Response for ApiGateway.

    See Also:
        `AWS Cloud Formation documentation for GatewayResponse
        <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-gatewayresponse.html>`_
    """

    RESOURCE_TYPE = "AWS::ApiGateway::GatewayResponse"

    Properties: GatewayResponseProperties = attrib(
        factory=GatewayResponseProperties,
        converter=create_object_converter(GatewayResponseProperties),
    )


@attrs(**ATTRSCONFIG)
class MethodProperties(ResourceProperties):
    ApiKeyRequired = attrib(default=None)
    AuthorizationScopes = attrib(default=None)
    AuthorizationType = attrib(default=None)
    AuthorizerId = attrib(default=None)
    HttpMethod = attrib(default=None)
    Integration = attrib(default=None)
    MethodResponses = attrib(default=None)
    OperationName = attrib(default=None)
    RequestModels = attrib(default=None)
    RequestParameters = attrib(default=None)
    RequestValidatorId = attrib(default=None)
    ResourceId = attrib(default=None)
    RestApiId = attrib(default=None)


@attrs(**ATTRSCONFIG)
class Method(Resource):
    """A Method for ApiGateway.

    See Also:
        `AWS Cloud Formation documentation for Method
        <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-method.html>`_
    """

    RESOURCE_TYPE = "AWS::ApiGateway::Method"

    Properties: MethodProperties = attrib(
        factory=MethodProperties,
        converter=create_object_converter(MethodProperties),
    )


@attrs(**ATTRSCONFIG)
class ModelProperties(ResourceProperties):
    ContentType = attrib(default=None)
    Description = attrib(default=None)
    Name = attrib(default=None)
    RestApiId = attrib(default=None)
    Schema = attrib(default=None)


@attrs(**ATTRSCONFIG)
class Model(Resource):
    """A Model for ApiGateway.

    See Also:
        `AWS Cloud Formation documentation for Model
        <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-model.html>`_
    """

    RESOURCE_TYPE = "AWS::ApiGateway::Model"

    Properties: ModelProperties = attrib(
        factory=ModelProperties,
        converter=create_object_converter(ModelProperties),
    )


@attrs(**ATTRSCONFIG)
class RequestValidatorProperties(ResourceProperties):
    Name = attrib(default=None)
    RestApiId = attrib(default=None)
    ValidateRequestBody = attrib(default=None)
    ValidateRequestParameters = attrib(default=None)


@attrs(**ATTRSCONFIG)
class RequestValidator(Resource):
    """A Request Validator for ApiGateway.

    See Also:
        `AWS Cloud Formation documentation for RequestValidator
        <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-requestvalidator.html>`_
    """

    RESOURCE_TYPE = "AWS::ApiGateway::RequestValidator"

    Properties: RequestValidatorProperties = attrib(
        factory=RequestValidatorProperties,
        converter=create_object_converter(RequestValidatorProperties),
    )


@attrs(**ATTRSCONFIG)
class ResourceProperties(ResourceProperties):
    ParentId = attrib(default=None)
    PathPart = attrib(default=None)
    RestApiId = attrib(default=None)


@attrs(**ATTRSCONFIG)
class Resource(Resource):
    """A Resource for ApiGateway.

    See Also:
        `AWS Cloud Formation documentation for Resource
        <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-resource.html>`_
    """

    RESOURCE_TYPE = "AWS::ApiGateway::Resource"

    Properties: ResourceProperties = attrib(
        factory=ResourceProperties,
        converter=create_object_converter(ResourceProperties),
    )


@attrs(**ATTRSCONFIG)
class RestApiProperties(ResourceProperties):
    ApiKeySourceType = attrib(default=None)
    BinaryMediaTypes = attrib(default=None)
    Body = attrib(default=None)
    BodyS3Location = attrib(default=None)
    CloneFrom = attrib(default=None)
    Description = attrib(default=None)
    EndpointConfiguration = attrib(default=None)
    FailOnWarnings = attrib(default=None)
    MinimumCompressionSize = attrib(default=None)
    Name = attrib(default=None)
    Parameters = attrib(default=None)
    Policy = attrib(default=None)


@attrs(**ATTRSCONFIG)
class RestApi(Resource):
    """A Rest Api for ApiGateway.

    See Also:
        `AWS Cloud Formation documentation for RestApi
        <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html>`_
    """

    RESOURCE_TYPE = "AWS::ApiGateway::RestApi"

    Properties: RestApiProperties = attrib(
        factory=RestApiProperties,
        converter=create_object_converter(RestApiProperties),
    )


@attrs(**ATTRSCONFIG)
class StageProperties(ResourceProperties):
    AccessLogSetting = attrib(default=None)
    CacheClusterEnabled = attrib(default=None)
    CacheClusterSize = attrib(default=None)
    CanarySetting = attrib(default=None)
    ClientCertificateId = attrib(default=None)
    DeploymentId = attrib(default=None)
    Description = attrib(default=None)
    DocumentationVersion = attrib(default=None)
    MethodSettings = attrib(default=None)
    RestApiId = attrib(default=None)
    StageName = attrib(default=None)
    Tags = attrib(default=None)
    TracingEnabled = attrib(default=None)
    Variables = attrib(default=None)


@attrs(**ATTRSCONFIG)
class Stage(Resource):
    """A Stage for ApiGateway.

    See Also:
        `AWS Cloud Formation documentation for Stage
        <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-stage.html>`_
    """

    RESOURCE_TYPE = "AWS::ApiGateway::Stage"

    Properties: StageProperties = attrib(
        factory=StageProperties,
        converter=create_object_converter(StageProperties),
    )


@attrs(**ATTRSCONFIG)
class UsagePlanProperties(ResourceProperties):
    ApiStages = attrib(default=None)
    Description = attrib(default=None)
    Quota = attrib(default=None)
    Throttle = attrib(default=None)
    UsagePlanName = attrib(default=None)


@attrs(**ATTRSCONFIG)
class UsagePlan(Resource):
    """A Usage Plan for ApiGateway.

    See Also:
        `AWS Cloud Formation documentation for UsagePlan
        <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-usageplan.html>`_
    """

    RESOURCE_TYPE = "AWS::ApiGateway::UsagePlan"

    Properties: UsagePlanProperties = attrib(
        factory=UsagePlanProperties,
        converter=create_object_converter(UsagePlanProperties),
    )


@attrs(**ATTRSCONFIG)
class UsagePlanKeyProperties(ResourceProperties):
    KeyId = attrib(default=None)
    KeyType = attrib(default=None)
    UsagePlanId = attrib(default=None)


@attrs(**ATTRSCONFIG)
class UsagePlanKey(Resource):
    """A Usage Plan Key for ApiGateway.

    See Also:
        `AWS Cloud Formation documentation for UsagePlanKey
        <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-usageplankey.html>`_
    """

    RESOURCE_TYPE = "AWS::ApiGateway::UsagePlanKey"

    Properties: UsagePlanKeyProperties = attrib(
        factory=UsagePlanKeyProperties,
        converter=create_object_converter(UsagePlanKeyProperties),
    )


@attrs(**ATTRSCONFIG)
class VpcLinkProperties(ResourceProperties):
    Description = attrib(default=None)
    Name = attrib(default=None)
    TargetArns = attrib(default=None)


@attrs(**ATTRSCONFIG)
class VpcLink(Resource):
    """A Vpc Link for ApiGateway.

    See Also:
        `AWS Cloud Formation documentation for VpcLink
        <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-vpclink.html>`_
    """

    RESOURCE_TYPE = "AWS::ApiGateway::VpcLink"

    Properties: VpcLinkProperties = attrib(
        factory=VpcLinkProperties,
        converter=create_object_converter(VpcLinkProperties),
    )
