lib/fussy/validators/default.ex

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

  alias Fussy.Utils

  defstruct [:inner, :default]

  @opaque t :: %__MODULE__{}

  @spec new(Fussy.Validator.t(), term()) :: __MODULE__.t()
  def new(inner, default) do
    %__MODULE__{inner: inner, default: default}
  end

  @impl true
  def validate(%__MODULE__{default: default}, nil) do
    {:ok, default}
  end

  @impl true
  def validate(%__MODULE__{inner: inner}, term) do
    Utils.validate_using(inner, term)
  end
end