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