Packages

Money functions for operations on and localization of a money data type with support for ISO 4217 currencies and ISO 24165 digial tokens (crypto currencies).

Current section

Files

Jump to
ex_money lib money protocol inspect.ex
Raw

lib/money/protocol/inspect.ex

defimpl Inspect, for: Money do
import Money, only: [is_digital_token: 1]
# `:digital_token` is an optional dependency. See `Money` for context.
@compile {:no_warn_undefined, DigitalToken}
def inspect(%Money{currency: token_id} = money, opts) when is_digital_token(token_id) do
short_name =
if Code.ensure_loaded?(DigitalToken) do
case apply(DigitalToken, :short_name, [token_id]) do
{:ok, name} -> name
_ -> token_id
end
else
token_id
end
money
|> Map.put(:currency, short_name)
|> do_inspect(opts)
end
def inspect(money, opts) do
do_inspect(money, opts)
end
def do_inspect(%Money{format_options: []} = money, _opts) do
"Money.new(#{inspect(money.currency)}, #{inspect(Decimal.to_string(money.amount))})"
end
def do_inspect(money, _opts) do
format_options =
money.format_options
|> inspect()
|> String.trim_leading("[")
|> String.trim_trailing("]")
"Money.new(#{inspect(money.currency)}, #{inspect(Decimal.to_string(money.amount))}, #{format_options})"
end
end