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

import typing

from ..core import enum

T_Result = typing.TypeVar("T_Result")


class EnkryptAiGuardrailConfigOperation(enum.StrEnum):
    """
    The operation type to use for the Guardrail. Validate guardrails are used to validate requests and mutate can validate as well as mutate requests.
    Validate guardrails are run in parallel while mutate guardrails are run sequentially.
    """

    VALIDATE = "validate"
    MUTATE = "mutate"
    _UNKNOWN = "__ENKRYPTAIGUARDRAILCONFIGOPERATION_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) -> "EnkryptAiGuardrailConfigOperation":
        unknown = cls._UNKNOWN
        unknown._value_ = value
        return unknown

    def visit(
        self,
        validate: typing.Callable[[], T_Result],
        mutate: typing.Callable[[], T_Result],
        _unknown_member: typing.Callable[[str], T_Result],
    ) -> T_Result:
        if self is EnkryptAiGuardrailConfigOperation.VALIDATE:
            return validate()
        if self is EnkryptAiGuardrailConfigOperation.MUTATE:
            return mutate()
        return _unknown_member(self._value_)
