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()], keyword()) :: t() def new!(index, values, opts \\ []) do opts = Validation.keyword!(opts, overwrite: true) %__MODULE__{ index: Validation.u32!(index, :index), values: Validation.string_list!(values, :values), overwrite: Validation.boolean!(opts[:overwrite], :overwrite) } end @spec new_with_name!(String.t(), [String.t()], keyword()) :: t() def new_with_name!(name, values, opts \\ []) do opts = Validation.keyword!(opts, overwrite: true) %__MODULE__{ name: Validation.non_empty_string!(name, :name), values: Validation.string_list!(values, :values), overwrite: Validation.boolean!(opts[:overwrite], :overwrite) } end end