defmodule Fussy.Validators.Literal do
@behaviour Fussy.Validator
alias Fussy.ValidationError
defstruct [:term]
@opaque t :: %__MODULE__{}
@spec new(term()) :: __MODULE__.t()
def new(term), do: %__MODULE__{term: term}
def validate(%__MODULE__{} = v, term), do: validate(v, [], term)
@impl true
def validate(%__MODULE__{term: term}, _path, term), do: {:ok, term}
@impl true
def validate(%__MODULE__{term: term}, path, other_term) do
{:error,
[
%ValidationError{
mod: __MODULE__,
msg: "must be #{inspect(term)}",
path: path,
term: other_term
}
]}
end
end