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

import enum
import typing

T_Result = typing.TypeVar("T_Result")


class MalwareTypeOv(str, enum.Enum):
    ADWARE = "adware"
    BACKDOOR = "backdoor"
    BOT = "bot"
    BOOTKIT = "bootkit"
    DDOS = "ddos"
    DOWNLOADER = "downloader"
    DROPPER = "dropper"
    EXPLOIT_KIT = "exploit_kit"
    KEYLOGGER = "keylogger"
    RANSOMWARE = "ransomware"
    REMOTE_ACCESS_TROJAN = "remote_access_trojan"
    RESOURCE_EXPLOITATION = "resource_exploitation"
    ROGUE_SECURITY_SOFTWARE = "rogue_security_software"
    ROOTKIT = "rootkit"
    SCREEN_CAPTURE = "screen_capture"
    SPYWARE = "spyware"
    TROJAN = "trojan"
    VIRUS = "virus"
    WIPER = "wiper"
    WORM = "worm"
    UNKNOWN = "unknown"
    OTHER = "other"

    def visit(
        self,
        adware: typing.Callable[[], T_Result],
        backdoor: typing.Callable[[], T_Result],
        bot: typing.Callable[[], T_Result],
        bootkit: typing.Callable[[], T_Result],
        ddos: typing.Callable[[], T_Result],
        downloader: typing.Callable[[], T_Result],
        dropper: typing.Callable[[], T_Result],
        exploit_kit: typing.Callable[[], T_Result],
        keylogger: typing.Callable[[], T_Result],
        ransomware: typing.Callable[[], T_Result],
        remote_access_trojan: typing.Callable[[], T_Result],
        resource_exploitation: typing.Callable[[], T_Result],
        rogue_security_software: typing.Callable[[], T_Result],
        rootkit: typing.Callable[[], T_Result],
        screen_capture: typing.Callable[[], T_Result],
        spyware: typing.Callable[[], T_Result],
        trojan: typing.Callable[[], T_Result],
        virus: typing.Callable[[], T_Result],
        wiper: typing.Callable[[], T_Result],
        worm: typing.Callable[[], T_Result],
        unknown: typing.Callable[[], T_Result],
        other: typing.Callable[[], T_Result],
    ) -> T_Result:
        if self is MalwareTypeOv.ADWARE:
            return adware()
        if self is MalwareTypeOv.BACKDOOR:
            return backdoor()
        if self is MalwareTypeOv.BOT:
            return bot()
        if self is MalwareTypeOv.BOOTKIT:
            return bootkit()
        if self is MalwareTypeOv.DDOS:
            return ddos()
        if self is MalwareTypeOv.DOWNLOADER:
            return downloader()
        if self is MalwareTypeOv.DROPPER:
            return dropper()
        if self is MalwareTypeOv.EXPLOIT_KIT:
            return exploit_kit()
        if self is MalwareTypeOv.KEYLOGGER:
            return keylogger()
        if self is MalwareTypeOv.RANSOMWARE:
            return ransomware()
        if self is MalwareTypeOv.REMOTE_ACCESS_TROJAN:
            return remote_access_trojan()
        if self is MalwareTypeOv.RESOURCE_EXPLOITATION:
            return resource_exploitation()
        if self is MalwareTypeOv.ROGUE_SECURITY_SOFTWARE:
            return rogue_security_software()
        if self is MalwareTypeOv.ROOTKIT:
            return rootkit()
        if self is MalwareTypeOv.SCREEN_CAPTURE:
            return screen_capture()
        if self is MalwareTypeOv.SPYWARE:
            return spyware()
        if self is MalwareTypeOv.TROJAN:
            return trojan()
        if self is MalwareTypeOv.VIRUS:
            return virus()
        if self is MalwareTypeOv.WIPER:
            return wiper()
        if self is MalwareTypeOv.WORM:
            return worm()
        if self is MalwareTypeOv.UNKNOWN:
            return unknown()
        if self is MalwareTypeOv.OTHER:
            return other()
