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

import enum
import typing

T_Result = typing.TypeVar("T_Result")


class OAuthServerName(str, enum.Enum):
    AIRTABLE = "Airtable"
    ASANA = "Asana"
    ATTIO = "Attio"
    BOX = "Box"
    CAL_COM = "Cal.com"
    CANVA = "Canva"
    CLICK_UP = "ClickUp"
    CLOSE = "Close"
    CONFLUENCE = "Confluence"
    DIALPAD = "Dialpad"
    DOCU_SIGN = "DocuSign"
    DROPBOX = "Dropbox"
    FIGMA = "Figma"
    GIT_HUB = "GitHub"
    GIT_LAB = "GitLab"
    GMAIL = "Gmail"
    GOOGLE_CALENDAR = "Google Calendar"
    GOOGLE_DOCS = "Google Docs"
    GOOGLE_DRIVE = "Google Drive"
    GOOGLE_SHEETS = "Google Sheets"
    HUB_SPOT = "HubSpot"
    JIRA = "Jira"
    KLAVIYO = "Klaviyo"
    LINEAR = "Linear"
    LINKED_IN = "LinkedIn"
    MONDAY = "Monday"
    MONEYBIRD = "Moneybird"
    NOTION = "Notion"
    ONEDRIVE = "Onedrive"
    PAGER_DUTY = "PagerDuty"
    PIPEDRIVE = "Pipedrive"
    QUICK_BOOKS = "QuickBooks"
    SALESFORCE = "Salesforce"
    SHOPIFY = "Shopify"
    SLACK = "Slack"
    STRIPE = "Stripe"
    SUPABASE = "Supabase"
    VERCEL = "Vercel"
    WORD_PRESS = "WordPress"
    XERO = "Xero"
    ZENDESK = "Zendesk"

    def visit(
        self,
        airtable: typing.Callable[[], T_Result],
        asana: typing.Callable[[], T_Result],
        attio: typing.Callable[[], T_Result],
        box: typing.Callable[[], T_Result],
        cal_com: typing.Callable[[], T_Result],
        canva: typing.Callable[[], T_Result],
        click_up: typing.Callable[[], T_Result],
        close: typing.Callable[[], T_Result],
        confluence: typing.Callable[[], T_Result],
        dialpad: typing.Callable[[], T_Result],
        docu_sign: typing.Callable[[], T_Result],
        dropbox: typing.Callable[[], T_Result],
        figma: typing.Callable[[], T_Result],
        git_hub: typing.Callable[[], T_Result],
        git_lab: typing.Callable[[], T_Result],
        gmail: typing.Callable[[], T_Result],
        google_calendar: typing.Callable[[], T_Result],
        google_docs: typing.Callable[[], T_Result],
        google_drive: typing.Callable[[], T_Result],
        google_sheets: typing.Callable[[], T_Result],
        hub_spot: typing.Callable[[], T_Result],
        jira: typing.Callable[[], T_Result],
        klaviyo: typing.Callable[[], T_Result],
        linear: typing.Callable[[], T_Result],
        linked_in: typing.Callable[[], T_Result],
        monday: typing.Callable[[], T_Result],
        moneybird: typing.Callable[[], T_Result],
        notion: typing.Callable[[], T_Result],
        onedrive: typing.Callable[[], T_Result],
        pager_duty: typing.Callable[[], T_Result],
        pipedrive: typing.Callable[[], T_Result],
        quick_books: typing.Callable[[], T_Result],
        salesforce: typing.Callable[[], T_Result],
        shopify: typing.Callable[[], T_Result],
        slack: typing.Callable[[], T_Result],
        stripe: typing.Callable[[], T_Result],
        supabase: typing.Callable[[], T_Result],
        vercel: typing.Callable[[], T_Result],
        word_press: typing.Callable[[], T_Result],
        xero: typing.Callable[[], T_Result],
        zendesk: typing.Callable[[], T_Result],
    ) -> T_Result:
        if self is OAuthServerName.AIRTABLE:
            return airtable()
        if self is OAuthServerName.ASANA:
            return asana()
        if self is OAuthServerName.ATTIO:
            return attio()
        if self is OAuthServerName.BOX:
            return box()
        if self is OAuthServerName.CAL_COM:
            return cal_com()
        if self is OAuthServerName.CANVA:
            return canva()
        if self is OAuthServerName.CLICK_UP:
            return click_up()
        if self is OAuthServerName.CLOSE:
            return close()
        if self is OAuthServerName.CONFLUENCE:
            return confluence()
        if self is OAuthServerName.DIALPAD:
            return dialpad()
        if self is OAuthServerName.DOCU_SIGN:
            return docu_sign()
        if self is OAuthServerName.DROPBOX:
            return dropbox()
        if self is OAuthServerName.FIGMA:
            return figma()
        if self is OAuthServerName.GIT_HUB:
            return git_hub()
        if self is OAuthServerName.GIT_LAB:
            return git_lab()
        if self is OAuthServerName.GMAIL:
            return gmail()
        if self is OAuthServerName.GOOGLE_CALENDAR:
            return google_calendar()
        if self is OAuthServerName.GOOGLE_DOCS:
            return google_docs()
        if self is OAuthServerName.GOOGLE_DRIVE:
            return google_drive()
        if self is OAuthServerName.GOOGLE_SHEETS:
            return google_sheets()
        if self is OAuthServerName.HUB_SPOT:
            return hub_spot()
        if self is OAuthServerName.JIRA:
            return jira()
        if self is OAuthServerName.KLAVIYO:
            return klaviyo()
        if self is OAuthServerName.LINEAR:
            return linear()
        if self is OAuthServerName.LINKED_IN:
            return linked_in()
        if self is OAuthServerName.MONDAY:
            return monday()
        if self is OAuthServerName.MONEYBIRD:
            return moneybird()
        if self is OAuthServerName.NOTION:
            return notion()
        if self is OAuthServerName.ONEDRIVE:
            return onedrive()
        if self is OAuthServerName.PAGER_DUTY:
            return pager_duty()
        if self is OAuthServerName.PIPEDRIVE:
            return pipedrive()
        if self is OAuthServerName.QUICK_BOOKS:
            return quick_books()
        if self is OAuthServerName.SALESFORCE:
            return salesforce()
        if self is OAuthServerName.SHOPIFY:
            return shopify()
        if self is OAuthServerName.SLACK:
            return slack()
        if self is OAuthServerName.STRIPE:
            return stripe()
        if self is OAuthServerName.SUPABASE:
            return supabase()
        if self is OAuthServerName.VERCEL:
            return vercel()
        if self is OAuthServerName.WORD_PRESS:
            return word_press()
        if self is OAuthServerName.XERO:
            return xero()
        if self is OAuthServerName.ZENDESK:
            return zendesk()
