"""fontTools.ttLib.tables.otDataSchema -- contains the FieldSpec dataclass, which is
used to define the schema of OpenType tables in otData.py.
"""

from typing import Any, NamedTuple


class FieldSpec(NamedTuple):
    """Represents a single field in an OpenType table schema.

    These are defined in `otData.py` and used to construct converters in
    `otConverters.py`.

    Attributes:
        type: The type of the field. This string is used by `otConverters.py` to
            select or construct the appropriate converter. It can be a simple
            type name (e.g. 'uint16', 'Tag', 'Offset'), a specialized type (e.g.
            'ValueRecord', 'DeltaValue'), or a more complex expression (e.g.
            'OffsetTo(AatStateTable)', 'AATLookup(UShort)') which is evaluated
            to create a converter factory.
        name: The name of the field as defined in the OpenType specification.
        repeat: If the field is an array, this defines how many times it
            repeats. It can be an integer, or the name of another field (usually
            a 'Count' field) that contains the number of repetitions. If it is a
            string, it is used to lookup the count value from the table.
        aux: Auxiliary data used by some converters. When `repeat` is not set
            and `aux` is a string, it is often compiled into a Python
            expression for evaluation. For repeating structs, it is often used
            as a constant or an expression.
        description: A human-readable description of the field's purpose.
    """

    type: str
    name: str
    repeat: Any = None
    aux: Any = None
    description: str = ""
