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

import typing

from ..core import enum

T_Result = typing.TypeVar("T_Result")


class PatronusGliderCriteria(enum.StrEnum):
    PATRONUS_IS_COMPLIANT = "patronus:is-compliant"
    PATRONUS_IS_FACTUALLY_CONSISTENT = "patronus:is-factually-consistent"
    PATRONUS_IS_GOOD_SUMMARY = "patronus:is-good-summary"
    PATRONUS_IS_HARMFUL_ADVICE = "patronus:is-harmful-advice"
    PATRONUS_IS_INFORMAL_TONE = "patronus:is-informal-tone"

    def visit(
        self,
        patronus_is_compliant: typing.Callable[[], T_Result],
        patronus_is_factually_consistent: typing.Callable[[], T_Result],
        patronus_is_good_summary: typing.Callable[[], T_Result],
        patronus_is_harmful_advice: typing.Callable[[], T_Result],
        patronus_is_informal_tone: typing.Callable[[], T_Result],
    ) -> T_Result:
        if self is PatronusGliderCriteria.PATRONUS_IS_COMPLIANT:
            return patronus_is_compliant()
        if self is PatronusGliderCriteria.PATRONUS_IS_FACTUALLY_CONSISTENT:
            return patronus_is_factually_consistent()
        if self is PatronusGliderCriteria.PATRONUS_IS_GOOD_SUMMARY:
            return patronus_is_good_summary()
        if self is PatronusGliderCriteria.PATRONUS_IS_HARMFUL_ADVICE:
            return patronus_is_harmful_advice()
        if self is PatronusGliderCriteria.PATRONUS_IS_INFORMAL_TONE:
            return patronus_is_informal_tone()
