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

import enum
import typing

T_Result = typing.TypeVar("T_Result")


class MemoryEmotionsItem(str, enum.Enum):
    ADMIRATION = "admiration"
    AMUSEMENT = "amusement"
    ANGER = "anger"
    ANNOYANCE = "annoyance"
    APPROVAL = "approval"
    CARING = "caring"
    CONFUSION = "confusion"
    CURIOSITY = "curiosity"
    DESIRE = "desire"
    DISAPPOINTMENT = "disappointment"
    DISAPPROVAL = "disapproval"
    DISGUST = "disgust"
    EMBARRASSMENT = "embarrassment"
    EXCITEMENT = "excitement"
    FEAR = "fear"
    GRATITUDE = "gratitude"
    GRIEF = "grief"
    JOY = "joy"
    LOVE = "love"
    NERVOUSNESS = "nervousness"
    NEUTRAL = "neutral"
    OPTIMISM = "optimism"
    PRIDE = "pride"
    REALIZATION = "realization"
    RELIEF = "relief"
    REMORSE = "remorse"
    SADNESS = "sadness"
    SARCASM = "sarcasm"
    SURPRISE = "surprise"

    def visit(
        self,
        admiration: typing.Callable[[], T_Result],
        amusement: typing.Callable[[], T_Result],
        anger: typing.Callable[[], T_Result],
        annoyance: typing.Callable[[], T_Result],
        approval: typing.Callable[[], T_Result],
        caring: typing.Callable[[], T_Result],
        confusion: typing.Callable[[], T_Result],
        curiosity: typing.Callable[[], T_Result],
        desire: typing.Callable[[], T_Result],
        disappointment: typing.Callable[[], T_Result],
        disapproval: typing.Callable[[], T_Result],
        disgust: typing.Callable[[], T_Result],
        embarrassment: typing.Callable[[], T_Result],
        excitement: typing.Callable[[], T_Result],
        fear: typing.Callable[[], T_Result],
        gratitude: typing.Callable[[], T_Result],
        grief: typing.Callable[[], T_Result],
        joy: typing.Callable[[], T_Result],
        love: typing.Callable[[], T_Result],
        nervousness: typing.Callable[[], T_Result],
        neutral: typing.Callable[[], T_Result],
        optimism: typing.Callable[[], T_Result],
        pride: typing.Callable[[], T_Result],
        realization: typing.Callable[[], T_Result],
        relief: typing.Callable[[], T_Result],
        remorse: typing.Callable[[], T_Result],
        sadness: typing.Callable[[], T_Result],
        sarcasm: typing.Callable[[], T_Result],
        surprise: typing.Callable[[], T_Result],
    ) -> T_Result:
        if self is MemoryEmotionsItem.ADMIRATION:
            return admiration()
        if self is MemoryEmotionsItem.AMUSEMENT:
            return amusement()
        if self is MemoryEmotionsItem.ANGER:
            return anger()
        if self is MemoryEmotionsItem.ANNOYANCE:
            return annoyance()
        if self is MemoryEmotionsItem.APPROVAL:
            return approval()
        if self is MemoryEmotionsItem.CARING:
            return caring()
        if self is MemoryEmotionsItem.CONFUSION:
            return confusion()
        if self is MemoryEmotionsItem.CURIOSITY:
            return curiosity()
        if self is MemoryEmotionsItem.DESIRE:
            return desire()
        if self is MemoryEmotionsItem.DISAPPOINTMENT:
            return disappointment()
        if self is MemoryEmotionsItem.DISAPPROVAL:
            return disapproval()
        if self is MemoryEmotionsItem.DISGUST:
            return disgust()
        if self is MemoryEmotionsItem.EMBARRASSMENT:
            return embarrassment()
        if self is MemoryEmotionsItem.EXCITEMENT:
            return excitement()
        if self is MemoryEmotionsItem.FEAR:
            return fear()
        if self is MemoryEmotionsItem.GRATITUDE:
            return gratitude()
        if self is MemoryEmotionsItem.GRIEF:
            return grief()
        if self is MemoryEmotionsItem.JOY:
            return joy()
        if self is MemoryEmotionsItem.LOVE:
            return love()
        if self is MemoryEmotionsItem.NERVOUSNESS:
            return nervousness()
        if self is MemoryEmotionsItem.NEUTRAL:
            return neutral()
        if self is MemoryEmotionsItem.OPTIMISM:
            return optimism()
        if self is MemoryEmotionsItem.PRIDE:
            return pride()
        if self is MemoryEmotionsItem.REALIZATION:
            return realization()
        if self is MemoryEmotionsItem.RELIEF:
            return relief()
        if self is MemoryEmotionsItem.REMORSE:
            return remorse()
        if self is MemoryEmotionsItem.SADNESS:
            return sadness()
        if self is MemoryEmotionsItem.SARCASM:
            return sarcasm()
        if self is MemoryEmotionsItem.SURPRISE:
            return surprise()
