lib/line_drive/lead_value.ex

defmodule LineDrive.LeadValue do
  @moduledoc """
  This module represent a lead value in pipedrive.
  """
  use TypedStruct
  use LineDrive.Structable

  typedstruct do
    field :amount, float()
    field :currency, String.t()
  end

  def new(nil), do: nil

  def new(val) when is_integer(val) do
    %__MODULE__{amount: val, currency: "USD"}
  end

  def new(map) do
    map
    |> atomize_keys()
    |> then(&struct(__MODULE__, &1))
  end
end