lib/fussy/validators/optional.ex

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

  alias Fussy.Utils

  defstruct [:inner]

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

  def validate(%__MODULE__{} = v, term), do: validate(v, [], term)

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

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