Packages
A production-grade, fully-typed Elixir client for the SumUp API (Checkouts, Readers, Customers, Transactions, Payouts, Receipts, Members, Memberships, Roles and Merchants) with telemetry, retries, cursor streaming, webhook handling, and RFC 9457 aware error handling.
Current section
Files
Jump to
Current section
Files
lib/sumup/customer.ex
defmodule Sumup.Customer do
@moduledoc "A vaulted SumUp customer, used to store payment instruments for later reuse."
@type personal_details :: %{
optional(:first_name) => String.t(),
optional(:last_name) => String.t(),
optional(:email) => String.t(),
optional(:phone) => String.t(),
optional(:birth_date) => String.t(),
optional(:tax_id) => String.t(),
optional(:address) => map()
}
@type t :: %__MODULE__{
customer_id: String.t(),
personal_details: personal_details(),
raw: map()
}
defstruct [:customer_id, personal_details: %{}, raw: %{}]
@doc false
@spec from_json(map()) :: t()
def from_json(json) when is_map(json) do
%__MODULE__{
customer_id: json["customer_id"],
personal_details: atomize_shallow(json["personal_details"] || %{}),
raw: json
}
end
defp atomize_shallow(map) do
Map.new(map, fn {k, v} -> {String.to_atom(k), v} end)
end
end