# This file was auto-generated by Fern from our API Definition.

import enum
import typing

T_Result = typing.TypeVar("T_Result")


class ProfileColumnExprProfile(str, enum.Enum):
    """
    ℹ️ This enum is non-exhaustive.
    """

    HEIGHT_CENTIMETER = "height_centimeter"
    BIRTH_DATE = "birth_date"
    WHEELCHAIR_USE = "wheelchair_use"
    GENDER = "gender"
    SEX = "sex"
    SOURCE_TYPE = "source_type"
    SOURCE_PROVIDER = "source_provider"
    SOURCE_APP_ID = "source_app_id"
    SOURCE_DEVICE_ID = "source_device_id"
    CREATED_AT = "created_at"
    UPDATED_AT = "updated_at"
    _UNKNOWN = "__PROFILECOLUMNEXPRPROFILE_UNKNOWN__"
    """
    This member is used for forward compatibility. If the value is not recognized by the enum, it will be stored here, and the raw value is accessible through `.value`.
    """

    @classmethod
    def _missing_(cls, value: typing.Any) -> "ProfileColumnExprProfile":
        unknown = cls._UNKNOWN
        unknown._value_ = value
        return unknown

    def visit(
        self,
        height_centimeter: typing.Callable[[], T_Result],
        birth_date: typing.Callable[[], T_Result],
        wheelchair_use: typing.Callable[[], T_Result],
        gender: typing.Callable[[], T_Result],
        sex: typing.Callable[[], T_Result],
        source_type: typing.Callable[[], T_Result],
        source_provider: typing.Callable[[], T_Result],
        source_app_id: typing.Callable[[], T_Result],
        source_device_id: typing.Callable[[], T_Result],
        created_at: typing.Callable[[], T_Result],
        updated_at: typing.Callable[[], T_Result],
        _unknown_member: typing.Callable[[str], T_Result],
    ) -> T_Result:
        if self is ProfileColumnExprProfile.HEIGHT_CENTIMETER:
            return height_centimeter()
        if self is ProfileColumnExprProfile.BIRTH_DATE:
            return birth_date()
        if self is ProfileColumnExprProfile.WHEELCHAIR_USE:
            return wheelchair_use()
        if self is ProfileColumnExprProfile.GENDER:
            return gender()
        if self is ProfileColumnExprProfile.SEX:
            return sex()
        if self is ProfileColumnExprProfile.SOURCE_TYPE:
            return source_type()
        if self is ProfileColumnExprProfile.SOURCE_PROVIDER:
            return source_provider()
        if self is ProfileColumnExprProfile.SOURCE_APP_ID:
            return source_app_id()
        if self is ProfileColumnExprProfile.SOURCE_DEVICE_ID:
            return source_device_id()
        if self is ProfileColumnExprProfile.CREATED_AT:
            return created_at()
        if self is ProfileColumnExprProfile.UPDATED_AT:
            return updated_at()
        return _unknown_member(self._value_)
