defmodule Talos.Types.FixedType do @moduledoc ~S""" Fixed type is used to check value to be equal expected For example: ```elixir iex> import Talos, only: [fixed: 1] iex> the_4th_planet = fixed(value: "Mars") iex> Talos.valid?(the_4th_planet, "Earth") false iex> Talos.valid?(the_4th_planet, "Mars") true ``` Additional parameters: `allow_nil` - allows value to be nil """ defstruct [:value, allow_nil: false, example_value: nil] @type t :: %{ __struct__: atom, allow_nil: boolean, example_value: any } @behaviour Talos.Types @spec valid?(Talos.Types.FixedType.t(), any) :: boolean def valid?(type, value) do errors(type, value) == [] end def errors(%__MODULE__{allow_nil: true}, nil) do [] end def errors(%__MODULE__{value: expected_value} = expected, value) do case expected_value == value do true -> [] false -> [inspect(value), "Should be #{inspect(expected)}"] end end end