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

See Also:
    `AWS developer guide for Neptune
    <https://docs.aws.amazon.com/neptune/latest/userguide/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__ = [
    "DBCluster",
    "DBClusterProperties",
    "DBClusterParameterGroup",
    "DBClusterParameterGroupProperties",
    "DBInstance",
    "DBInstanceProperties",
    "DBParameterGroup",
    "DBParameterGroupProperties",
    "DBSubnetGroup",
    "DBSubnetGroupProperties",
]


@attrs(**ATTRSCONFIG)
class DBClusterProperties(ResourceProperties):
    AvailabilityZones = attrib(default=None)
    BackupRetentionPeriod = attrib(default=None)
    DBClusterIdentifier = attrib(default=None)
    DBClusterParameterGroupName = attrib(default=None)
    DBSubnetGroupName = attrib(default=None)
    IamAuthEnabled = attrib(default=None)
    KmsKeyId = attrib(default=None)
    Port = attrib(default=None)
    PreferredBackupWindow = attrib(default=None)
    PreferredMaintenanceWindow = attrib(default=None)
    SnapshotIdentifier = attrib(default=None)
    StorageEncrypted = attrib(default=None)
    Tags = attrib(default=None)
    VpcSecurityGroupIds = attrib(default=None)


@attrs(**ATTRSCONFIG)
class DBCluster(Resource):
    """A Db Cluster for Neptune.

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

    RESOURCE_TYPE = "AWS::Neptune::DBCluster"

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


@attrs(**ATTRSCONFIG)
class DBClusterParameterGroupProperties(ResourceProperties):
    Description = attrib(default=None)
    Family = attrib(default=None)
    Name = attrib(default=None)
    Parameters = attrib(default=None)
    Tags = attrib(default=None)


@attrs(**ATTRSCONFIG)
class DBClusterParameterGroup(Resource):
    """A Db Cluster Parameter Group for Neptune.

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

    RESOURCE_TYPE = "AWS::Neptune::DBClusterParameterGroup"

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


@attrs(**ATTRSCONFIG)
class DBInstanceProperties(ResourceProperties):
    AllowMajorVersionUpgrade = attrib(default=None)
    AutoMinorVersionUpgrade = attrib(default=None)
    AvailabilityZone = attrib(default=None)
    DBClusterIdentifier = attrib(default=None)
    DBInstanceClass = attrib(default=None)
    DBInstanceIdentifier = attrib(default=None)
    DBParameterGroupName = attrib(default=None)
    DBSnapshotIdentifier = attrib(default=None)
    DBSubnetGroupName = attrib(default=None)
    PreferredMaintenanceWindow = attrib(default=None)
    Tags = attrib(default=None)


@attrs(**ATTRSCONFIG)
class DBInstance(Resource):
    """A Db Instance for Neptune.

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

    RESOURCE_TYPE = "AWS::Neptune::DBInstance"

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


@attrs(**ATTRSCONFIG)
class DBParameterGroupProperties(ResourceProperties):
    Description = attrib(default=None)
    Family = attrib(default=None)
    Name = attrib(default=None)
    Parameters = attrib(default=None)
    Tags = attrib(default=None)


@attrs(**ATTRSCONFIG)
class DBParameterGroup(Resource):
    """A Db Parameter Group for Neptune.

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

    RESOURCE_TYPE = "AWS::Neptune::DBParameterGroup"

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


@attrs(**ATTRSCONFIG)
class DBSubnetGroupProperties(ResourceProperties):
    DBSubnetGroupDescription = attrib(default=None)
    DBSubnetGroupName = attrib(default=None)
    SubnetIds = attrib(default=None)
    Tags = attrib(default=None)


@attrs(**ATTRSCONFIG)
class DBSubnetGroup(Resource):
    """A Db Subnet Group for Neptune.

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

    RESOURCE_TYPE = "AWS::Neptune::DBSubnetGroup"

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