defmodule Bling.PaymentMethod do
@moduledoc """
A struct to normalize stripe sources.
"""
@type t :: %{
id: String.t(),
type: String.t(),
last_four: String.t() | nil,
card_brand: String.t() | nil
}
defstruct id: nil, type: nil, last_four: nil, card_brand: nil
@doc """
Given a stripe source, card, or payment method, returns a Bling.PaymentMethod struct or nil.
"""
def from_source(%Stripe.Card{} = source) do
%Bling.PaymentMethod{
id: source.id,
type: "card",
last_four: source.last4,
card_brand: source.brand
}
end
def from_source(%Stripe.Source{} = source) do
%Bling.PaymentMethod{
id: source.id,
type: source.type,
last_four: if(source.type == "card", do: source.card.last4, else: nil),
card_brand: if(source.type == "card", do: source.card.brand, else: nil)
}
end
def from_source(%Stripe.PaymentMethod{} = source) do
%Bling.PaymentMethod{
id: source.id,
type: source.type,
last_four: if(source.type == "card", do: source.card.last4, else: nil),
card_brand: if(source.type == "card", do: source.card.brand, else: nil)
}
end
def from_source(_source), do: nil
end