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

import typing

from ........core import enum

T_Result = typing.TypeVar("T_Result")


class SpecializationCategory(enum.StrEnum):
    BEHAVIORAL_HEALTH_THERAPY = "BEHAVIORAL_HEALTH_THERAPY"
    CARDIOLOGY = "CARDIOLOGY"
    DERMATOLOGY = "DERMATOLOGY"
    ENDOCRINOLOGY = "ENDOCRINOLOGY"
    ENT = "ENT"
    GASTROENTEROLOGY = "GASTROENTEROLOGY"
    GENERAL_SURGERY = "GENERAL_SURGERY"
    GENETICS = "GENETICS"
    HEMATOLOGY = "HEMATOLOGY"
    INFECTIOUS_DISEASE = "INFECTIOUS_DISEASE"
    NEUROLOGY = "NEUROLOGY"
    NUTRITIONAL_THERAPY = "NUTRITIONAL_THERAPY"
    OB_GYN = "OB_GYN"
    ONCOLOGY = "ONCOLOGY"
    OPHTHALMOLOGY = "OPHTHALMOLOGY"
    ORTHOPEDICS = "ORTHOPEDICS"
    PAIN_MANAGEMENT = "PAIN_MANAGEMENT"
    PEDIATRICS = "PEDIATRICS"
    PHYSICAL_THERAPY = "PHYSICAL_THERAPY"
    PODIATRY = "PODIATRY"
    PRIMARY_CARE = "PRIMARY_CARE"
    PSYCHIATRY = "PSYCHIATRY"
    PULMONOLOGY = "PULMONOLOGY"
    RADIOLOGY = "RADIOLOGY"
    RHEUMATOLOGY = "RHEUMATOLOGY"
    SCREENING = "SCREENING"
    UROLOGY = "UROLOGY"
    OTHER = "OTHER"
    _UNKNOWN = "__SPECIALIZATIONCATEGORY_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) -> "SpecializationCategory":
        unknown = cls._UNKNOWN
        unknown._value_ = value
        return unknown

    def visit(
        self,
        behavioral_health_therapy: typing.Callable[[], T_Result],
        cardiology: typing.Callable[[], T_Result],
        dermatology: typing.Callable[[], T_Result],
        endocrinology: typing.Callable[[], T_Result],
        ent: typing.Callable[[], T_Result],
        gastroenterology: typing.Callable[[], T_Result],
        general_surgery: typing.Callable[[], T_Result],
        genetics: typing.Callable[[], T_Result],
        hematology: typing.Callable[[], T_Result],
        infectious_disease: typing.Callable[[], T_Result],
        neurology: typing.Callable[[], T_Result],
        nutritional_therapy: typing.Callable[[], T_Result],
        ob_gyn: typing.Callable[[], T_Result],
        oncology: typing.Callable[[], T_Result],
        ophthalmology: typing.Callable[[], T_Result],
        orthopedics: typing.Callable[[], T_Result],
        pain_management: typing.Callable[[], T_Result],
        pediatrics: typing.Callable[[], T_Result],
        physical_therapy: typing.Callable[[], T_Result],
        podiatry: typing.Callable[[], T_Result],
        primary_care: typing.Callable[[], T_Result],
        psychiatry: typing.Callable[[], T_Result],
        pulmonology: typing.Callable[[], T_Result],
        radiology: typing.Callable[[], T_Result],
        rheumatology: typing.Callable[[], T_Result],
        screening: typing.Callable[[], T_Result],
        urology: typing.Callable[[], T_Result],
        other: typing.Callable[[], T_Result],
        _unknown_member: typing.Callable[[str], T_Result],
    ) -> T_Result:
        if self is SpecializationCategory.BEHAVIORAL_HEALTH_THERAPY:
            return behavioral_health_therapy()
        if self is SpecializationCategory.CARDIOLOGY:
            return cardiology()
        if self is SpecializationCategory.DERMATOLOGY:
            return dermatology()
        if self is SpecializationCategory.ENDOCRINOLOGY:
            return endocrinology()
        if self is SpecializationCategory.ENT:
            return ent()
        if self is SpecializationCategory.GASTROENTEROLOGY:
            return gastroenterology()
        if self is SpecializationCategory.GENERAL_SURGERY:
            return general_surgery()
        if self is SpecializationCategory.GENETICS:
            return genetics()
        if self is SpecializationCategory.HEMATOLOGY:
            return hematology()
        if self is SpecializationCategory.INFECTIOUS_DISEASE:
            return infectious_disease()
        if self is SpecializationCategory.NEUROLOGY:
            return neurology()
        if self is SpecializationCategory.NUTRITIONAL_THERAPY:
            return nutritional_therapy()
        if self is SpecializationCategory.OB_GYN:
            return ob_gyn()
        if self is SpecializationCategory.ONCOLOGY:
            return oncology()
        if self is SpecializationCategory.OPHTHALMOLOGY:
            return ophthalmology()
        if self is SpecializationCategory.ORTHOPEDICS:
            return orthopedics()
        if self is SpecializationCategory.PAIN_MANAGEMENT:
            return pain_management()
        if self is SpecializationCategory.PEDIATRICS:
            return pediatrics()
        if self is SpecializationCategory.PHYSICAL_THERAPY:
            return physical_therapy()
        if self is SpecializationCategory.PODIATRY:
            return podiatry()
        if self is SpecializationCategory.PRIMARY_CARE:
            return primary_care()
        if self is SpecializationCategory.PSYCHIATRY:
            return psychiatry()
        if self is SpecializationCategory.PULMONOLOGY:
            return pulmonology()
        if self is SpecializationCategory.RADIOLOGY:
            return radiology()
        if self is SpecializationCategory.RHEUMATOLOGY:
            return rheumatology()
        if self is SpecializationCategory.SCREENING:
            return screening()
        if self is SpecializationCategory.UROLOGY:
            return urology()
        if self is SpecializationCategory.OTHER:
            return other()
        return _unknown_member(self._value_)
