Skip to main content

lib/kameleoon/data/browser.ex

defmodule Kameleoon.Data.Browser do
  @moduledoc false

  alias Kameleoon.Data.Validation

  @type browser_type :: :chrome | :internet_explorer | :firefox | :safari | :opera | :other

  @valid_types [:chrome, :internet_explorer, :firefox, :safari, :opera, :other]

  @enforce_keys [:type]
  defstruct [:type, version: nil]

  @type t :: %__MODULE__{
          type: browser_type(),
          version: number() | nil
        }

  @spec new!(browser_type(), keyword()) :: t()
  def new!(type, opts \\ []) do
    opts = Validation.keyword!(opts, version: nil)

    %__MODULE__{
      type: Validation.one_of!(type, @valid_types, :type),
      version: Validation.number_or_nil!(opts[:version], :version)
    }
  end
end