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/reader_status.ex
defmodule Sumup.ReaderStatus do
@moduledoc "Live device status for a paired reader (battery, firmware, connectivity)."
@type connectivity :: :online | :offline | :unknown
@type t :: %__MODULE__{
status: connectivity(),
state: String.t() | nil,
battery_level: float() | nil,
battery_temperature: integer() | nil,
connection_type: String.t() | nil,
firmware_version: String.t() | nil,
last_activity: DateTime.t() | nil,
raw: map()
}
defstruct [
:status,
:state,
:battery_level,
:battery_temperature,
:connection_type,
:firmware_version,
:last_activity,
raw: %{}
]
@doc false
@spec from_json(map()) :: t()
def from_json(json) when is_map(json) do
data = json["data"] || json
%__MODULE__{
status: status(data["status"]),
state: data["state"],
battery_level: data["battery_level"],
battery_temperature: data["battery_temperature"],
connection_type: data["connection_type"],
firmware_version: data["firmware_version"],
last_activity: parse_datetime(data["last_activity"]),
raw: json
}
end
defp status("ONLINE"), do: :online
defp status("OFFLINE"), do: :offline
defp status(_), do: :unknown
defp parse_datetime(nil), do: nil
defp parse_datetime(str) when is_binary(str) do
case DateTime.from_iso8601(str) do
{:ok, dt, _} -> dt
_ -> nil
end
end
end