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

import enum
import typing

T_Result = typing.TypeVar("T_Result")


class ClientFacingResource(str, enum.Enum):
    PROFILE = "profile"
    ACTIVITY = "activity"
    SLEEP = "sleep"
    BODY = "body"
    WORKOUTS = "workouts"
    WORKOUT_STREAM = "workout_stream"
    CONNECTION = "connection"
    ORDER = "order"
    RESULT = "result"
    APPOINTMENT = "appointment"
    GLUCOSE = "glucose"
    HEARTRATE = "heartrate"
    HRV = "hrv"
    IGE = "ige"
    IGG = "igg"
    BLOOD_OXYGEN = "blood_oxygen"
    BLOOD_PRESSURE = "blood_pressure"
    CHOLESTEROL = "cholesterol"
    DEVICE = "device"
    WEIGHT = "weight"
    FAT = "fat"
    BODY_TEMPERATURE = "body_temperature"
    BODY_TEMPERATURE_DELTA = "body_temperature_delta"
    MEAL = "meal"
    WATER = "water"
    CAFFEINE = "caffeine"
    MINDFULNESS_MINUTES = "mindfulness_minutes"
    STEPS = "steps"
    CALORIES_ACTIVE = "calories_active"
    DISTANCE = "distance"
    FLOORS_CLIMBED = "floors_climbed"
    RESPIRATORY_RATE = "respiratory_rate"
    VO_2_MAX = "vo2_max"
    CALORIES_BASAL = "calories_basal"
    STRESS_LEVEL = "stress_level"
    MENSTRUAL_CYCLE = "menstrual_cycle"
    SLEEP_CYCLE = "sleep_cycle"
    ELECTROCARDIOGRAM = "electrocardiogram"
    ELECTROCARDIOGRAM_VOLTAGE = "electrocardiogram_voltage"
    AFIB_BURDEN = "afib_burden"
    HEART_RATE_ALERT = "heart_rate_alert"
    STAND_HOUR = "stand_hour"
    STAND_DURATION = "stand_duration"
    SLEEP_APNEA_ALERT = "sleep_apnea_alert"
    SLEEP_BREATHING_DISTURBANCE = "sleep_breathing_disturbance"
    WHEELCHAIR_PUSH = "wheelchair_push"
    FORCED_EXPIRATORY_VOLUME_1 = "forced_expiratory_volume_1"
    FORCED_VITAL_CAPACITY = "forced_vital_capacity"
    PEAK_EXPIRATORY_FLOW_RATE = "peak_expiratory_flow_rate"
    INHALER_USAGE = "inhaler_usage"
    FALL = "fall"
    UV_EXPOSURE = "uv_exposure"
    DAYLIGHT_EXPOSURE = "daylight_exposure"
    HANDWASHING = "handwashing"
    BASAL_BODY_TEMPERATURE = "basal_body_temperature"
    BODY_MASS_INDEX = "body_mass_index"
    LEAN_BODY_MASS = "lean_body_mass"
    WAIST_CIRCUMFERENCE = "waist_circumference"
    WORKOUT_DURATION = "workout_duration"
    INSULIN_INJECTION = "insulin_injection"
    CARBOHYDRATES = "carbohydrates"
    NOTE = "note"
    SLEEP_STREAM = "sleep_stream"
    HYPNOGRAM = "hypnogram"

    def visit(
        self,
        profile: typing.Callable[[], T_Result],
        activity: typing.Callable[[], T_Result],
        sleep: typing.Callable[[], T_Result],
        body: typing.Callable[[], T_Result],
        workouts: typing.Callable[[], T_Result],
        workout_stream: typing.Callable[[], T_Result],
        connection: typing.Callable[[], T_Result],
        order: typing.Callable[[], T_Result],
        result: typing.Callable[[], T_Result],
        appointment: typing.Callable[[], T_Result],
        glucose: typing.Callable[[], T_Result],
        heartrate: typing.Callable[[], T_Result],
        hrv: typing.Callable[[], T_Result],
        ige: typing.Callable[[], T_Result],
        igg: typing.Callable[[], T_Result],
        blood_oxygen: typing.Callable[[], T_Result],
        blood_pressure: typing.Callable[[], T_Result],
        cholesterol: typing.Callable[[], T_Result],
        device: typing.Callable[[], T_Result],
        weight: typing.Callable[[], T_Result],
        fat: typing.Callable[[], T_Result],
        body_temperature: typing.Callable[[], T_Result],
        body_temperature_delta: typing.Callable[[], T_Result],
        meal: typing.Callable[[], T_Result],
        water: typing.Callable[[], T_Result],
        caffeine: typing.Callable[[], T_Result],
        mindfulness_minutes: typing.Callable[[], T_Result],
        steps: typing.Callable[[], T_Result],
        calories_active: typing.Callable[[], T_Result],
        distance: typing.Callable[[], T_Result],
        floors_climbed: typing.Callable[[], T_Result],
        respiratory_rate: typing.Callable[[], T_Result],
        vo_2_max: typing.Callable[[], T_Result],
        calories_basal: typing.Callable[[], T_Result],
        stress_level: typing.Callable[[], T_Result],
        menstrual_cycle: typing.Callable[[], T_Result],
        sleep_cycle: typing.Callable[[], T_Result],
        electrocardiogram: typing.Callable[[], T_Result],
        electrocardiogram_voltage: typing.Callable[[], T_Result],
        afib_burden: typing.Callable[[], T_Result],
        heart_rate_alert: typing.Callable[[], T_Result],
        stand_hour: typing.Callable[[], T_Result],
        stand_duration: typing.Callable[[], T_Result],
        sleep_apnea_alert: typing.Callable[[], T_Result],
        sleep_breathing_disturbance: typing.Callable[[], T_Result],
        wheelchair_push: typing.Callable[[], T_Result],
        forced_expiratory_volume_1: typing.Callable[[], T_Result],
        forced_vital_capacity: typing.Callable[[], T_Result],
        peak_expiratory_flow_rate: typing.Callable[[], T_Result],
        inhaler_usage: typing.Callable[[], T_Result],
        fall: typing.Callable[[], T_Result],
        uv_exposure: typing.Callable[[], T_Result],
        daylight_exposure: typing.Callable[[], T_Result],
        handwashing: typing.Callable[[], T_Result],
        basal_body_temperature: typing.Callable[[], T_Result],
        body_mass_index: typing.Callable[[], T_Result],
        lean_body_mass: typing.Callable[[], T_Result],
        waist_circumference: typing.Callable[[], T_Result],
        workout_duration: typing.Callable[[], T_Result],
        insulin_injection: typing.Callable[[], T_Result],
        carbohydrates: typing.Callable[[], T_Result],
        note: typing.Callable[[], T_Result],
        sleep_stream: typing.Callable[[], T_Result],
        hypnogram: typing.Callable[[], T_Result],
    ) -> T_Result:
        if self is ClientFacingResource.PROFILE:
            return profile()
        if self is ClientFacingResource.ACTIVITY:
            return activity()
        if self is ClientFacingResource.SLEEP:
            return sleep()
        if self is ClientFacingResource.BODY:
            return body()
        if self is ClientFacingResource.WORKOUTS:
            return workouts()
        if self is ClientFacingResource.WORKOUT_STREAM:
            return workout_stream()
        if self is ClientFacingResource.CONNECTION:
            return connection()
        if self is ClientFacingResource.ORDER:
            return order()
        if self is ClientFacingResource.RESULT:
            return result()
        if self is ClientFacingResource.APPOINTMENT:
            return appointment()
        if self is ClientFacingResource.GLUCOSE:
            return glucose()
        if self is ClientFacingResource.HEARTRATE:
            return heartrate()
        if self is ClientFacingResource.HRV:
            return hrv()
        if self is ClientFacingResource.IGE:
            return ige()
        if self is ClientFacingResource.IGG:
            return igg()
        if self is ClientFacingResource.BLOOD_OXYGEN:
            return blood_oxygen()
        if self is ClientFacingResource.BLOOD_PRESSURE:
            return blood_pressure()
        if self is ClientFacingResource.CHOLESTEROL:
            return cholesterol()
        if self is ClientFacingResource.DEVICE:
            return device()
        if self is ClientFacingResource.WEIGHT:
            return weight()
        if self is ClientFacingResource.FAT:
            return fat()
        if self is ClientFacingResource.BODY_TEMPERATURE:
            return body_temperature()
        if self is ClientFacingResource.BODY_TEMPERATURE_DELTA:
            return body_temperature_delta()
        if self is ClientFacingResource.MEAL:
            return meal()
        if self is ClientFacingResource.WATER:
            return water()
        if self is ClientFacingResource.CAFFEINE:
            return caffeine()
        if self is ClientFacingResource.MINDFULNESS_MINUTES:
            return mindfulness_minutes()
        if self is ClientFacingResource.STEPS:
            return steps()
        if self is ClientFacingResource.CALORIES_ACTIVE:
            return calories_active()
        if self is ClientFacingResource.DISTANCE:
            return distance()
        if self is ClientFacingResource.FLOORS_CLIMBED:
            return floors_climbed()
        if self is ClientFacingResource.RESPIRATORY_RATE:
            return respiratory_rate()
        if self is ClientFacingResource.VO_2_MAX:
            return vo_2_max()
        if self is ClientFacingResource.CALORIES_BASAL:
            return calories_basal()
        if self is ClientFacingResource.STRESS_LEVEL:
            return stress_level()
        if self is ClientFacingResource.MENSTRUAL_CYCLE:
            return menstrual_cycle()
        if self is ClientFacingResource.SLEEP_CYCLE:
            return sleep_cycle()
        if self is ClientFacingResource.ELECTROCARDIOGRAM:
            return electrocardiogram()
        if self is ClientFacingResource.ELECTROCARDIOGRAM_VOLTAGE:
            return electrocardiogram_voltage()
        if self is ClientFacingResource.AFIB_BURDEN:
            return afib_burden()
        if self is ClientFacingResource.HEART_RATE_ALERT:
            return heart_rate_alert()
        if self is ClientFacingResource.STAND_HOUR:
            return stand_hour()
        if self is ClientFacingResource.STAND_DURATION:
            return stand_duration()
        if self is ClientFacingResource.SLEEP_APNEA_ALERT:
            return sleep_apnea_alert()
        if self is ClientFacingResource.SLEEP_BREATHING_DISTURBANCE:
            return sleep_breathing_disturbance()
        if self is ClientFacingResource.WHEELCHAIR_PUSH:
            return wheelchair_push()
        if self is ClientFacingResource.FORCED_EXPIRATORY_VOLUME_1:
            return forced_expiratory_volume_1()
        if self is ClientFacingResource.FORCED_VITAL_CAPACITY:
            return forced_vital_capacity()
        if self is ClientFacingResource.PEAK_EXPIRATORY_FLOW_RATE:
            return peak_expiratory_flow_rate()
        if self is ClientFacingResource.INHALER_USAGE:
            return inhaler_usage()
        if self is ClientFacingResource.FALL:
            return fall()
        if self is ClientFacingResource.UV_EXPOSURE:
            return uv_exposure()
        if self is ClientFacingResource.DAYLIGHT_EXPOSURE:
            return daylight_exposure()
        if self is ClientFacingResource.HANDWASHING:
            return handwashing()
        if self is ClientFacingResource.BASAL_BODY_TEMPERATURE:
            return basal_body_temperature()
        if self is ClientFacingResource.BODY_MASS_INDEX:
            return body_mass_index()
        if self is ClientFacingResource.LEAN_BODY_MASS:
            return lean_body_mass()
        if self is ClientFacingResource.WAIST_CIRCUMFERENCE:
            return waist_circumference()
        if self is ClientFacingResource.WORKOUT_DURATION:
            return workout_duration()
        if self is ClientFacingResource.INSULIN_INJECTION:
            return insulin_injection()
        if self is ClientFacingResource.CARBOHYDRATES:
            return carbohydrates()
        if self is ClientFacingResource.NOTE:
            return note()
        if self is ClientFacingResource.SLEEP_STREAM:
            return sleep_stream()
        if self is ClientFacingResource.HYPNOGRAM:
            return hypnogram()
