lib/fussy/validators/literal.ex

defmodule Fussy.Validators.Literal do
  @behaviour Fussy.Validator

  defstruct [:literal]

  @opaque t :: %__MODULE__{}

  @spec new(term()) :: __MODULE__.t()

  def new(literal), do: %__MODULE__{literal: literal}

  @impl true
  def validate(%__MODULE__{literal: literal}, term) when literal == term, do: {:ok, term}

  @impl true
  def validate(%__MODULE__{literal: literal}, _), do: {:error, ["must be #{inspect(literal)}"]}
end