defmodule TehamaClient.Unit do @moduledoc """ A tehama device. """ use TypedStruct # require Logger typedstruct do @typedoc "A typed Device struct" field(:id, String.t()) field(:apt, String.t()) field(:addr, String.t()) field(:building, String.t()) field(:meters, [TehamaClient.Meter.t()]) end def from_devices(devices) when is_list(devices) do sorted_devices = devices |> Enum.sort_by(fn %TehamaClient.Device{node_id: node_id} -> node_id end) unit = sorted_devices |> List.first() |> TehamaClient.Unit.from_device() %TehamaClient.Unit{ unit | meters: sorted_devices |> Enum.map(&TehamaClient.Meter.from_device/1) } end def from_device(%TehamaClient.Device{} = device) do %TehamaClient.Unit{ id: device.node_id, apt: device.apt, addr: device.addr, building: device.building } end end