Skip to main content

lib/kameleoon/data/page_view.ex

defmodule Kameleoon.Data.PageView do
  @moduledoc false

  alias Kameleoon.Data.Validation

  @enforce_keys [:url]
  defstruct [:url, title: nil, referrers: []]

  @type t :: %__MODULE__{
          url: String.t(),
          title: String.t() | nil,
          referrers: [integer()]
        }

  @spec new!(String.t(), keyword()) :: t()
  def new!(url, opts \\ []) do
    opts = Validation.keyword!(opts, title: nil, referrers: [])

    %__MODULE__{
      url: Validation.non_empty_string!(url, :url),
      title: Validation.string_or_nil!(opts[:title], :title),
      referrers: Validation.integer_list!(opts[:referrers], :referrers)
    }
  end
end