Current section

Files

Jump to
absinthe lib absinthe phase document validation provided_an_operation.ex
Raw

lib/absinthe/phase/document/validation/provided_an_operation.ex

defmodule Absinthe.Phase.Document.Validation.ProvidedAnOperation do
@moduledoc false
# Validates document to ensure that at least one operation is given.
alias Absinthe.{Blueprint, Phase}
use Absinthe.Phase
use Absinthe.Phase.Validation
@doc """
Run the validation.
"""
@spec run(Blueprint.t, Keyword.t) :: Phase.result_t
def run(input, options \\ []) do
case {handle_node(input), Map.new(options)} do
{%{flags: %{no_operations: _}} = result, %{jump_phases: true, validation_result_phase: abort_phase}} ->
{:jump, result, abort_phase}
{result, _} ->
{:ok, result}
end
end
# Check for operation without any operations
@spec handle_node(Blueprint.t) :: Blueprint.t
defp handle_node(%Blueprint{operations: []} = node) do
node
|> flag_invalid(:no_operations)
|> put_error(error())
end
defp handle_node(node) do
node
end
@doc """
Generate an error message for the validation.
"""
@spec error_message() :: String.t
def error_message do
"No operations provided."
end
# Generate the error for the node
@spec error() :: Phase.Error.t
defp error do
Phase.Error.new(
__MODULE__,
error_message()
)
end
end