"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""

from __future__ import annotations
from .achcreditsamedaypaymentmethod import (
    AchCreditSameDayPaymentMethod,
    AchCreditSameDayPaymentMethodTypedDict,
)
from .achcreditstandardpaymentmethod import (
    AchCreditStandardPaymentMethod,
    AchCreditStandardPaymentMethodTypedDict,
)
from .achdebitcollectpaymentmethod import (
    AchDebitCollectPaymentMethod,
    AchDebitCollectPaymentMethodTypedDict,
)
from .achdebitfundpaymentmethod import (
    AchDebitFundPaymentMethod,
    AchDebitFundPaymentMethodTypedDict,
)
from .applepaypaymentmethod import ApplePayPaymentMethod, ApplePayPaymentMethodTypedDict
from .cardpaymentpaymentmethod import (
    CardPaymentPaymentMethod,
    CardPaymentPaymentMethodTypedDict,
)
from .cardpresentpaymentpaymentmethod import (
    CardPresentPaymentPaymentMethod,
    CardPresentPaymentPaymentMethodTypedDict,
)
from .instantbankcreditpaymentmethod import (
    InstantBankCreditPaymentMethod,
    InstantBankCreditPaymentMethodTypedDict,
)
from .moovwalletpaymentmethod import (
    MoovWalletPaymentMethod,
    MoovWalletPaymentMethodTypedDict,
)
from .pullfromcardpaymentmethod import (
    PullFromCardPaymentMethod,
    PullFromCardPaymentMethodTypedDict,
)
from .pushtocardpaymentmethod import (
    PushToCardPaymentMethod,
    PushToCardPaymentMethodTypedDict,
)
from .rtpcreditpaymentmethod import (
    RtpCreditPaymentMethod,
    RtpCreditPaymentMethodTypedDict,
)
from moovio_sdk.utils import get_discriminator
from pydantic import Discriminator, Tag
from typing import Union
from typing_extensions import Annotated, TypeAliasType


PaymentMethodTypedDict = TypeAliasType(
    "PaymentMethodTypedDict",
    Union[
        MoovWalletPaymentMethodTypedDict,
        AchDebitFundPaymentMethodTypedDict,
        AchDebitCollectPaymentMethodTypedDict,
        AchCreditStandardPaymentMethodTypedDict,
        AchCreditSameDayPaymentMethodTypedDict,
        RtpCreditPaymentMethodTypedDict,
        CardPaymentPaymentMethodTypedDict,
        PushToCardPaymentMethodTypedDict,
        PullFromCardPaymentMethodTypedDict,
        ApplePayPaymentMethodTypedDict,
        CardPresentPaymentPaymentMethodTypedDict,
        InstantBankCreditPaymentMethodTypedDict,
    ],
)
r"""A method of moving money"""


PaymentMethod = Annotated[
    Union[
        Annotated[MoovWalletPaymentMethod, Tag("moov-wallet")],
        Annotated[AchDebitFundPaymentMethod, Tag("ach-debit-fund")],
        Annotated[AchDebitCollectPaymentMethod, Tag("ach-debit-collect")],
        Annotated[AchCreditStandardPaymentMethod, Tag("ach-credit-standard")],
        Annotated[AchCreditSameDayPaymentMethod, Tag("ach-credit-same-day")],
        Annotated[RtpCreditPaymentMethod, Tag("rtp-credit")],
        Annotated[CardPaymentPaymentMethod, Tag("card-payment")],
        Annotated[PushToCardPaymentMethod, Tag("push-to-card")],
        Annotated[PullFromCardPaymentMethod, Tag("pull-from-card")],
        Annotated[ApplePayPaymentMethod, Tag("apple-pay")],
        Annotated[CardPresentPaymentPaymentMethod, Tag("card-present-payment")],
        Annotated[InstantBankCreditPaymentMethod, Tag("instant-bank-credit")],
    ],
    Discriminator(
        lambda m: get_discriminator(m, "payment_method_type", "paymentMethodType")
    ),
]
r"""A method of moving money"""
