"""
This is a manually generated file.  It is not generated by botocraft.  We've
included it here because so many services use this ``Tag`` model, and we don't
want to keep redefining it.
"""

# pylint: disable=anomalous-backslash-in-string
from typing import Optional, List

from .abstract import Boto3Model


class Tag(Boto3Model):
    """
    The metadata that you apply to a resource to help you categorize and
    organize them. Each tag consists of a key and an optional value. You define
    them.

    The following basic restrictions apply to tags:

    * Maximum number of tags per resource - 50
    * For each resource, each tag key must be unique, and each tag key can have
      only one value.
    * Maximum key length - 128 Unicode characters in UTF-8
    * Maximum value length - 256 Unicode characters in UTF-8
    * If your tagging schema is used across multiple services and resources,
      remember that other services may have restrictions on allowed characters.
      Generally allowed characters are: letters, numbers, and spaces representable in
      UTF-8, and the following characters: + - = . _ : / @.
    * Tag keys and values are case-sensitive.
    * Do not use ``aws:``, ``AWS:``, or any upper or lowercase combination of such
      as a prefix for either keys or values as it is reserved for Amazon Web Services
      use. You cannot edit or delete tag keys or values with this prefix. Tags with
      this prefix do not count against your tags per resource limit.
    """

    #: One part of a key-value pair that make up a tag. A ``key`` is a general label
    #: that acts like a category for more specific tag values.
    Key: str | None = None
    #: The optional part of a key-value pair that make up a tag. A ``value`` acts as a
    #: descriptor within a tag category (key).
    Value: str | None = None


class Filter(Boto3Model):
    """
    A filter name and value pair that is used to return a more specific list of
    results from a describe operation. Filters can be used to match a set of
    resources by specific criteria, such as IDs. The filters supported by a
    describe operation are documented with the describe operation.

    Currently, wildcards are not supported in filters.

    The following actions can be filtered:

    * ``DescribeDBClusterBacktracks``
    * ``DescribeDBClusterEndpoints``
    * ``DescribeDBClusters``
    * ``DescribeDBInstances``
    * ``DescribePendingMaintenanceActions``
    """

    #: The name of the filter. Filter names are case-sensitive.
    Name: str
    #: One or more filter values. Filter values are case-sensitive.
    Values: List[str]
