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
sumup lib sumup reader_status.ex
Raw

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