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

import enum
import typing

T_Result = typing.TypeVar("T_Result")


class AwsRegion(str, enum.Enum):
    US_EAST_1 = "us-east-1"
    """
    US East 1 (N. Virginia)
    """

    US_EAST_2 = "us-east-2"
    """
    US East 2 (Ohio)
    """

    US_WEST_1 = "us-west-1"
    """
    US West 1 (N. California)
    """

    US_WEST_2 = "us-west-2"
    """
    US West 2 (Oregon)
    """

    AF_SOUTH_1 = "af-south-1"
    """
    Africa South 1 (Cape Town)
    """

    AP_EAST_1 = "ap-east-1"
    """
    Asia Pacific East 1 (Hong Kong)
    """

    AP_SOUTH_2 = "ap-south-2"
    """
    Asia Pacific South 2 (Hyderabad)
    """

    AP_SOUTHEAST_3 = "ap-southeast-3"
    """
    Asia Pacific Southeast 3 (Jakarta)
    """

    AP_SOUTHEAST_5 = "ap-southeast-5"
    """
    Asia Pacific Southeast 5 (Malaysia)
    """

    AP_SOUTHEAST_4 = "ap-southeast-4"
    """
    Asia Pacific Southeast 4 (Melbourne)
    """

    AP_SOUTH_1 = "ap-south-1"
    """
    Asia Pacific South 1 (Mumbai)
    """

    AP_NORTHEAST_3 = "ap-northeast-3"
    """
    Asia Pacific Northeast 3 (Osaka)
    """

    AP_NORTHEAST_2 = "ap-northeast-2"
    """
    Asia Pacific Northeast 2 (Seoul)
    """

    AP_SOUTHEAST_1 = "ap-southeast-1"
    """
    Asia Pacific Southeast 1 (Singapore)
    """

    AP_SOUTHEAST_2 = "ap-southeast-2"
    """
    Asia Pacific Southeast 2 (Sydney)
    """

    AP_EAST_2 = "ap-east-2"
    """
    Asia Pacific East 2 (Taipei)
    """

    AP_SOUTHEAST_7 = "ap-southeast-7"
    """
    Asia Pacific Southeast 7 (Thailand)
    """

    AP_NORTHEAST_1 = "ap-northeast-1"
    """
    Asia Pacific Northeast 1 (Tokyo)
    """

    CA_CENTRAL_1 = "ca-central-1"
    """
    Canada Central 1 (Central)
    """

    CA_WEST_1 = "ca-west-1"
    """
    Canada West 1 (Calgary)
    """

    EU_CENTRAL_1 = "eu-central-1"
    """
    Europe Central 1 (Frankfurt)
    """

    EU_WEST_1 = "eu-west-1"
    """
    Europe West 1 (Ireland)
    """

    EU_WEST_2 = "eu-west-2"
    """
    Europe West 2 (London)
    """

    EU_SOUTH_1 = "eu-south-1"
    """
    Europe South 1 (Milan)
    """

    EU_WEST_3 = "eu-west-3"
    """
    Europe West 3 (Paris)
    """

    EU_SOUTH_2 = "eu-south-2"
    """
    Europe South 2 (Spain)
    """

    EU_NORTH_1 = "eu-north-1"
    """
    Europe North 1 (Stockholm)
    """

    EU_CENTRAL_2 = "eu-central-2"
    """
    Europe Central 2 (Zurich)
    """

    IL_CENTRAL_1 = "il-central-1"
    """
    Israel Central 1 (Tel Aviv)
    """

    MX_CENTRAL_1 = "mx-central-1"
    """
    Mexico Central 1
    """

    ME_SOUTH_1 = "me-south-1"
    """
    Middle East South 1 (Bahrain)
    """

    ME_CENTRAL_1 = "me-central-1"
    """
    Middle East Central 1 (UAE)
    """

    SA_EAST_1 = "sa-east-1"
    """
    South America East 1 (São Paulo)
    """

    _UNKNOWN = "__AWSREGION_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) -> "AwsRegion":
        unknown = cls._UNKNOWN
        unknown._value_ = value
        return unknown

    def visit(
        self,
        us_east_1: typing.Callable[[], T_Result],
        us_east_2: typing.Callable[[], T_Result],
        us_west_1: typing.Callable[[], T_Result],
        us_west_2: typing.Callable[[], T_Result],
        af_south_1: typing.Callable[[], T_Result],
        ap_east_1: typing.Callable[[], T_Result],
        ap_south_2: typing.Callable[[], T_Result],
        ap_southeast_3: typing.Callable[[], T_Result],
        ap_southeast_5: typing.Callable[[], T_Result],
        ap_southeast_4: typing.Callable[[], T_Result],
        ap_south_1: typing.Callable[[], T_Result],
        ap_northeast_3: typing.Callable[[], T_Result],
        ap_northeast_2: typing.Callable[[], T_Result],
        ap_southeast_1: typing.Callable[[], T_Result],
        ap_southeast_2: typing.Callable[[], T_Result],
        ap_east_2: typing.Callable[[], T_Result],
        ap_southeast_7: typing.Callable[[], T_Result],
        ap_northeast_1: typing.Callable[[], T_Result],
        ca_central_1: typing.Callable[[], T_Result],
        ca_west_1: typing.Callable[[], T_Result],
        eu_central_1: typing.Callable[[], T_Result],
        eu_west_1: typing.Callable[[], T_Result],
        eu_west_2: typing.Callable[[], T_Result],
        eu_south_1: typing.Callable[[], T_Result],
        eu_west_3: typing.Callable[[], T_Result],
        eu_south_2: typing.Callable[[], T_Result],
        eu_north_1: typing.Callable[[], T_Result],
        eu_central_2: typing.Callable[[], T_Result],
        il_central_1: typing.Callable[[], T_Result],
        mx_central_1: typing.Callable[[], T_Result],
        me_south_1: typing.Callable[[], T_Result],
        me_central_1: typing.Callable[[], T_Result],
        sa_east_1: typing.Callable[[], T_Result],
        _unknown_member: typing.Callable[[str], T_Result],
    ) -> T_Result:
        if self is AwsRegion.US_EAST_1:
            return us_east_1()
        if self is AwsRegion.US_EAST_2:
            return us_east_2()
        if self is AwsRegion.US_WEST_1:
            return us_west_1()
        if self is AwsRegion.US_WEST_2:
            return us_west_2()
        if self is AwsRegion.AF_SOUTH_1:
            return af_south_1()
        if self is AwsRegion.AP_EAST_1:
            return ap_east_1()
        if self is AwsRegion.AP_SOUTH_2:
            return ap_south_2()
        if self is AwsRegion.AP_SOUTHEAST_3:
            return ap_southeast_3()
        if self is AwsRegion.AP_SOUTHEAST_5:
            return ap_southeast_5()
        if self is AwsRegion.AP_SOUTHEAST_4:
            return ap_southeast_4()
        if self is AwsRegion.AP_SOUTH_1:
            return ap_south_1()
        if self is AwsRegion.AP_NORTHEAST_3:
            return ap_northeast_3()
        if self is AwsRegion.AP_NORTHEAST_2:
            return ap_northeast_2()
        if self is AwsRegion.AP_SOUTHEAST_1:
            return ap_southeast_1()
        if self is AwsRegion.AP_SOUTHEAST_2:
            return ap_southeast_2()
        if self is AwsRegion.AP_EAST_2:
            return ap_east_2()
        if self is AwsRegion.AP_SOUTHEAST_7:
            return ap_southeast_7()
        if self is AwsRegion.AP_NORTHEAST_1:
            return ap_northeast_1()
        if self is AwsRegion.CA_CENTRAL_1:
            return ca_central_1()
        if self is AwsRegion.CA_WEST_1:
            return ca_west_1()
        if self is AwsRegion.EU_CENTRAL_1:
            return eu_central_1()
        if self is AwsRegion.EU_WEST_1:
            return eu_west_1()
        if self is AwsRegion.EU_WEST_2:
            return eu_west_2()
        if self is AwsRegion.EU_SOUTH_1:
            return eu_south_1()
        if self is AwsRegion.EU_WEST_3:
            return eu_west_3()
        if self is AwsRegion.EU_SOUTH_2:
            return eu_south_2()
        if self is AwsRegion.EU_NORTH_1:
            return eu_north_1()
        if self is AwsRegion.EU_CENTRAL_2:
            return eu_central_2()
        if self is AwsRegion.IL_CENTRAL_1:
            return il_central_1()
        if self is AwsRegion.MX_CENTRAL_1:
            return mx_central_1()
        if self is AwsRegion.ME_SOUTH_1:
            return me_south_1()
        if self is AwsRegion.ME_CENTRAL_1:
            return me_central_1()
        if self is AwsRegion.SA_EAST_1:
            return sa_east_1()
        return _unknown_member(self._value_)
