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

import enum
import typing

T_Result = typing.TypeVar("T_Result")


class MalwareCapabilitiesOv(str, enum.Enum):
    ACCESSES_REMOTE_MACHINES = "accesses_remote_machines"
    ANTI_DEBUGGING = "anti_debugging"
    ANTI_DISASSEMBLY = "anti_disassembly"
    ANTI_EMULATION = "anti_emulation"
    ANTI_MEMORY_FORENSICS = "anti_memory_forensics"
    ANTI_SANDBOX = "anti_sandbox"
    ANTI_VM = "anti_vm"
    CAPTURES_INPUT_PERIPHERALS = "captures_input_peripherals"
    CAPTURES_OUTPUT_PERIPHERALS = "captures_output_peripherals"
    CAPTURES_SYSTEM_STATE_DATA = "captures_system_state_data"
    CAPTURES_TRACES_OF_INFECTION = "captures_traces_of_infection"
    COMMITS_FRAUD = "commits_fraud"
    COMMUNICATES_WITH_C_2 = "communicates_with_c2"
    COMPROMISES_DATA_AVAILABILITY = "compromises_data_availability"
    COMPROMISES_DATA_INTEGRITY = "compromises_data_integrity"
    COMPROMISES_SYSTEM_AVAILABILITY = "compromises_system_availability"
    CONTROLS_LOCAL_MACHINE = "controls_local_machine"
    DEGRADES_SECURITY_SOFTWARE = "degrades_security_software"
    DEGRADES_UPDATES = "degrades_updates"
    DETERMINES_C_2_SERVER = "determines_c2_server"
    EMAILS_SPAM = "emails_spam"
    ESCALATES_PRIVILEGES = "escalates_privileges"
    EVADES_AV = "evades_av"
    EXFILTRATES_DATA = "exfiltrates_data"
    FINGERPRINTS_HOST = "fingerprints_host"
    HIDES_ARTIFACTS = "hides_artifacts"
    HIDES_EXECUTING_CODE = "hides_executing_code"
    INFECTS_FILES = "infects_files"
    INFECTS_REMOTE_MACHINES = "infects_remote_machines"
    INSTALLS_OTHER_COMPONENTS = "installs_other_components"
    PERSISTS_AFTER_SYSTEM_REBOOT = "persists_after_system_reboot"
    PREVENTS_ARTIFACT_ACCESS = "prevents_artifact_access"
    PREVENTS_ARTIFACT_DELETION = "prevents_artifact_deletion"
    PROBES_NETWORK_ENVIRONMENT = "probes_network_environment"
    SELF_MODIFIES = "self_modifies"
    STEALS_AUTHENTICATION_CREDENTIALS = "steals_authentication_credentials"
    VIOLATES_SYSTEM_OPERATIONAL_INTEGRITY = "violates_system_operational_integrity"

    def visit(
        self,
        accesses_remote_machines: typing.Callable[[], T_Result],
        anti_debugging: typing.Callable[[], T_Result],
        anti_disassembly: typing.Callable[[], T_Result],
        anti_emulation: typing.Callable[[], T_Result],
        anti_memory_forensics: typing.Callable[[], T_Result],
        anti_sandbox: typing.Callable[[], T_Result],
        anti_vm: typing.Callable[[], T_Result],
        captures_input_peripherals: typing.Callable[[], T_Result],
        captures_output_peripherals: typing.Callable[[], T_Result],
        captures_system_state_data: typing.Callable[[], T_Result],
        captures_traces_of_infection: typing.Callable[[], T_Result],
        commits_fraud: typing.Callable[[], T_Result],
        communicates_with_c_2: typing.Callable[[], T_Result],
        compromises_data_availability: typing.Callable[[], T_Result],
        compromises_data_integrity: typing.Callable[[], T_Result],
        compromises_system_availability: typing.Callable[[], T_Result],
        controls_local_machine: typing.Callable[[], T_Result],
        degrades_security_software: typing.Callable[[], T_Result],
        degrades_updates: typing.Callable[[], T_Result],
        determines_c_2_server: typing.Callable[[], T_Result],
        emails_spam: typing.Callable[[], T_Result],
        escalates_privileges: typing.Callable[[], T_Result],
        evades_av: typing.Callable[[], T_Result],
        exfiltrates_data: typing.Callable[[], T_Result],
        fingerprints_host: typing.Callable[[], T_Result],
        hides_artifacts: typing.Callable[[], T_Result],
        hides_executing_code: typing.Callable[[], T_Result],
        infects_files: typing.Callable[[], T_Result],
        infects_remote_machines: typing.Callable[[], T_Result],
        installs_other_components: typing.Callable[[], T_Result],
        persists_after_system_reboot: typing.Callable[[], T_Result],
        prevents_artifact_access: typing.Callable[[], T_Result],
        prevents_artifact_deletion: typing.Callable[[], T_Result],
        probes_network_environment: typing.Callable[[], T_Result],
        self_modifies: typing.Callable[[], T_Result],
        steals_authentication_credentials: typing.Callable[[], T_Result],
        violates_system_operational_integrity: typing.Callable[[], T_Result],
    ) -> T_Result:
        if self is MalwareCapabilitiesOv.ACCESSES_REMOTE_MACHINES:
            return accesses_remote_machines()
        if self is MalwareCapabilitiesOv.ANTI_DEBUGGING:
            return anti_debugging()
        if self is MalwareCapabilitiesOv.ANTI_DISASSEMBLY:
            return anti_disassembly()
        if self is MalwareCapabilitiesOv.ANTI_EMULATION:
            return anti_emulation()
        if self is MalwareCapabilitiesOv.ANTI_MEMORY_FORENSICS:
            return anti_memory_forensics()
        if self is MalwareCapabilitiesOv.ANTI_SANDBOX:
            return anti_sandbox()
        if self is MalwareCapabilitiesOv.ANTI_VM:
            return anti_vm()
        if self is MalwareCapabilitiesOv.CAPTURES_INPUT_PERIPHERALS:
            return captures_input_peripherals()
        if self is MalwareCapabilitiesOv.CAPTURES_OUTPUT_PERIPHERALS:
            return captures_output_peripherals()
        if self is MalwareCapabilitiesOv.CAPTURES_SYSTEM_STATE_DATA:
            return captures_system_state_data()
        if self is MalwareCapabilitiesOv.CAPTURES_TRACES_OF_INFECTION:
            return captures_traces_of_infection()
        if self is MalwareCapabilitiesOv.COMMITS_FRAUD:
            return commits_fraud()
        if self is MalwareCapabilitiesOv.COMMUNICATES_WITH_C_2:
            return communicates_with_c_2()
        if self is MalwareCapabilitiesOv.COMPROMISES_DATA_AVAILABILITY:
            return compromises_data_availability()
        if self is MalwareCapabilitiesOv.COMPROMISES_DATA_INTEGRITY:
            return compromises_data_integrity()
        if self is MalwareCapabilitiesOv.COMPROMISES_SYSTEM_AVAILABILITY:
            return compromises_system_availability()
        if self is MalwareCapabilitiesOv.CONTROLS_LOCAL_MACHINE:
            return controls_local_machine()
        if self is MalwareCapabilitiesOv.DEGRADES_SECURITY_SOFTWARE:
            return degrades_security_software()
        if self is MalwareCapabilitiesOv.DEGRADES_UPDATES:
            return degrades_updates()
        if self is MalwareCapabilitiesOv.DETERMINES_C_2_SERVER:
            return determines_c_2_server()
        if self is MalwareCapabilitiesOv.EMAILS_SPAM:
            return emails_spam()
        if self is MalwareCapabilitiesOv.ESCALATES_PRIVILEGES:
            return escalates_privileges()
        if self is MalwareCapabilitiesOv.EVADES_AV:
            return evades_av()
        if self is MalwareCapabilitiesOv.EXFILTRATES_DATA:
            return exfiltrates_data()
        if self is MalwareCapabilitiesOv.FINGERPRINTS_HOST:
            return fingerprints_host()
        if self is MalwareCapabilitiesOv.HIDES_ARTIFACTS:
            return hides_artifacts()
        if self is MalwareCapabilitiesOv.HIDES_EXECUTING_CODE:
            return hides_executing_code()
        if self is MalwareCapabilitiesOv.INFECTS_FILES:
            return infects_files()
        if self is MalwareCapabilitiesOv.INFECTS_REMOTE_MACHINES:
            return infects_remote_machines()
        if self is MalwareCapabilitiesOv.INSTALLS_OTHER_COMPONENTS:
            return installs_other_components()
        if self is MalwareCapabilitiesOv.PERSISTS_AFTER_SYSTEM_REBOOT:
            return persists_after_system_reboot()
        if self is MalwareCapabilitiesOv.PREVENTS_ARTIFACT_ACCESS:
            return prevents_artifact_access()
        if self is MalwareCapabilitiesOv.PREVENTS_ARTIFACT_DELETION:
            return prevents_artifact_deletion()
        if self is MalwareCapabilitiesOv.PROBES_NETWORK_ENVIRONMENT:
            return probes_network_environment()
        if self is MalwareCapabilitiesOv.SELF_MODIFIES:
            return self_modifies()
        if self is MalwareCapabilitiesOv.STEALS_AUTHENTICATION_CREDENTIALS:
            return steals_authentication_credentials()
        if self is MalwareCapabilitiesOv.VIOLATES_SYSTEM_OPERATIONAL_INTEGRITY:
            return violates_system_operational_integrity()
