lib/requests/payments/destinations.ex

defmodule Requests.Payments.Destinations do
  alias Requests.Payments.Destinations.{BankAccount, BankPayoutId, Card, Id, Token}

  alias Requests.Payments.Destinations.Holders.{
    CorporateAccount,
    GovernmentAccount,
    IndividualAccount
  }

  def build(%{type: "card"} = params), do: Card.build(params)

  def build(%{type: "id"} = params), do: Id.build(params)

  def build(%{type: "token"} = params), do: Token.build(params)

  def build(%{type: "corporate_account"} = params), do: CorporateAccount.build(params)

  def build(%{type: "government_account"} = params), do: GovernmentAccount.build(params)

  def build(%{type: "individual_account"} = params), do: IndividualAccount.build(params)

  def build(_), do: nil

  def build_bank_payout_destination(%{type: "bank_account"} = params),
    do: BankAccount.build(params)

  def build_bank_payout_destination(%{type: "id"} = params), do: BankPayoutId.build(params)

  def build_bank_payout_destination(_), do: nil
end