lib/kuddle/config/types/decimal.ex
defmodule Kuddle.Config.Types.Decimal do
def cast(%Decimal{} = value) do
{:ok, value}
end
def cast(value) when is_binary(value) do
case Decimal.parse(value) do
{:ok, %Decimal{} = value} ->
{:ok, value}
{%Decimal{} = value, ""} ->
{:ok, value}
{%Decimal{}, _} ->
:error
:error ->
:error
end
end
def cast(value) when is_integer(value) do
{:ok, Decimal.new(value)}
end
def cast(value) when is_float(value) do
{:ok, Decimal.from_float(value)}
end
def cast(_) do
:error
end
end