Current section
Files
Jump to
Current section
Files
lib/utility/poisoned_decimal.ex
defmodule PoisonedDecimal do
@moduledoc """
Copied from https://github.com/solatis/gold.
Hacky wrapper for Decimal library to use different encoding than the one prepared for Decimal in Ecto (or different conflicting libraries)
"""
defstruct [:decimal]
def new(%Decimal{} = decimal) do
%PoisonedDecimal{decimal: decimal}
end
def poison_params(%PoisonedDecimal{} = params) do
params
end
def poison_params(%Decimal{} = params) do
params |> new
end
def poison_params({key, value}) do
{poison_params(key), poison_params(value)}
end
def poison_params(params) when is_list(params) do
params |> Enum.map(&poison_params/1)
end
def poison_params(%{__struct__: s} = params) do
params
|> Map.from_struct()
|> Map.to_list()
|> poison_params
|> s.__struct__
end
def poison_params(%{} = params) do
params
|> Map.to_list()
|> poison_params
|> Map.new()
end
def poison_params(params), do: params
end