defmodule Marketplace.Ash.Types.Currency do
@moduledoc false
use Ash.Type
@impl true
def storage_type, do: :decimal
@impl true
def cast_input(nil, _), do: {:ok, nil}
def cast_input(value, _) do
case Money.parse(value) do
{:ok, value} -> {:ok, Money.to_decimal(value)}
:error -> {:error, [reason: "failed to parse value"]}
end
end
@impl true
def cast_stored(nil, _), do: {:ok, nil}
def cast_stored(value, _), do: {:ok, Money.parse!(value)}
@impl true
def dump_to_native(nil, _), do: {:ok, nil}
def dump_to_native(%Decimal{} = value, _), do: {:ok, value}
def dump_to_native(%Money{} = value, _), do: {:ok, Money.to_decimal(value)}
def dump_to_native(_, _), do: :error
def graphql_type, do: :money
end
defmodule Marketplace.Ash.Types.Currency do
@moduledoc false
use Ash.Type
@impl true
def storage_type, do: :decimal
@impl true
def cast_input(nil, _), do: {:ok, nil}
def cast_input(value, _) do
case Money.parse(value) do
{:ok, value} -> {:ok, Money.to_decimal(value)}
:error -> {:error, [reason: "failed to parse value"]}
end
end
@impl true
def cast_stored(nil, _), do: {:ok, nil}
def cast_stored(value, _), do: {:ok, Money.parse!(value)}
@impl true
def dump_to_native(nil, _), do: {:ok, nil}
def dump_to_native(%Decimal{} = value, _), do: {:ok, value}
def dump_to_native(%Money{} = value, _), do: {:ok, Money.to_decimal(value)}
def dump_to_native(_, _), do: :error
def graphql_type, do: :money
end