Skip to main content

lib/kameleoon/data/conversion.ex

defmodule Kameleoon.Data.Conversion do
  @moduledoc false

  alias Kameleoon.Data.Validation

  @enforce_keys [:goal_id]
  defstruct [:goal_id, revenue: nil, negative: false, metadata: []]

  @type t :: %__MODULE__{
          goal_id: non_neg_integer(),
          revenue: number() | nil,
          negative: boolean(),
          metadata: [Kameleoon.Data.CustomData.t()]
        }

  @spec new!(non_neg_integer(), keyword()) :: t()
  def new!(goal_id, opts \\ []) do
    opts = Validation.keyword!(opts, revenue: nil, negative: false, metadata: [])

    %__MODULE__{
      goal_id: Validation.u32!(goal_id, :goal_id),
      revenue: Validation.number_or_nil!(opts[:revenue], :revenue),
      negative: Validation.boolean!(opts[:negative], :negative),
      metadata: Validation.custom_data_list!(opts[:metadata], :metadata)
    }
  end
end