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