defmodule Reactor.Dsl.Verifier do
@moduledoc """
Runs `Reactor.Dsl.Build.verify/2` for all the entities in the reactor.
"""
use Spark.Dsl.Verifier
alias Reactor.Dsl.Build
alias Spark.Dsl.Verifier
@doc false
@impl true
@spec verify(Spark.Dsl.t()) :: :ok | {:error, any}
def verify(dsl_state) do
dsl_state
|> Verifier.get_entities([:reactor])
|> Enum.reduce_while(:ok, fn entity, :ok ->
case Build.verify(entity, dsl_state) do
:ok -> {:cont, :ok}
{:error, reason} -> {:halt, {:error, reason}}
end
end)
end
end