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