defmodule Requests.Payments.Sources.Token do
alias Customers.BillingAddress
alias Customers.Phone
@type t :: %__MODULE__{
type: String.t(),
token: String.t(),
billing_address: BillingAddress.t(),
phone: Phone.t(),
store_for_future_use: true | false
}
@enforce_keys [:type, :token]
defstruct [
:type,
:token,
:billing_address,
:phone,
:store_for_future_use
]
def build(raw_params) when is_map(raw_params) do
params =
Enum.into(raw_params, %{}, fn {key, value} -> {String.to_existing_atom(key), value} end)
%{
type: params[:type],
token: params[:token],
billing_address: BillingAddress.build(params[:billing_address]),
phone: Phone.build(params[:phone]),
store_for_future_use: params[:store_for_future_use]
}
end
def build(_), do: nil
end