Packages

Ecto-friendly units commonly used in the IHDL world.

Current section

Files

Jump to
ex_ihdl_units lib kilowatt_hours.ex
Raw

lib/kilowatt_hours.ex

defmodule ExIhdlUnits.KilowattHours do
@behaviour Ecto.Type
@watts_per_kilowatt 1000
def type, do: :integer
def cast(value)
when is_number(value) do
{:ok, value}
end
def cast(_), do: :error
def load(data) do
data_in_kwh = data / @watts_per_kilowatt
data_in_kwh_int = data_in_kwh |> Kernel.trunc()
cond do
data_in_kwh == data_in_kwh_int ->
{:ok, data_in_kwh_int}
true ->
{:ok, data_in_kwh}
end
end
def dump(value) when is_number(value),
do: {:ok, (value * @watts_per_kilowatt) |> Kernel.trunc()}
def dump(_), do: :error
end