defmodule Kameleoon.Data.CustomData do
@moduledoc false
alias Kameleoon.Data.Validation
defstruct index: nil,
name: nil,
values: [],
overwrite: true
@type t :: %__MODULE__{
index: non_neg_integer() | nil,
name: String.t() | nil,
values: [String.t()],
overwrite: boolean()
}
@spec new!(non_neg_integer() | String.t(), [String.t()], keyword()) :: t()
def new!(identifier, values, opts \\ []) do
opts = Validation.keyword!(opts, overwrite: true)
values = Validation.string_list!(values, :values)
overwrite = Validation.boolean!(opts[:overwrite], :overwrite)
case identifier do
index when is_integer(index) ->
index = Validation.u32!(index, :index)
%__MODULE__{
index: index,
values: values,
overwrite: overwrite
}
name when is_binary(name) ->
name = Validation.non_empty_string!(name, :name)
%__MODULE__{
name: name,
values: values,
overwrite: overwrite
}
value ->
raise ArgumentError,
"expected :index or :name to be an unsigned 32-bit integer or a non-empty string, got: #{inspect(value)}"
end
end
end