zf

zenflows testing
git clone https://s.sonu.ch/~srfsh/zf.git
Log | Files | Refs | Submodules | README | LICENSE

check.ex (1317B)


      1 defmodule Absinthe.Plug.DocumentProvider.Compiled.Check do
      2   @moduledoc false
      3 
      4   alias Absinthe.{Blueprint, Phase}
      5 
      6   use Absinthe.Phase
      7 
      8   @doc """
      9   Run the validation.
     10   """
     11   @spec run(Blueprint.t(), Keyword.t()) :: Phase.result_t()
     12   def run(input, opts) do
     13     do_run(input, Map.new(opts))
     14   end
     15 
     16   @spec do_run(Blueprint.t(), map) :: Phase.result_t() | no_return
     17   def do_run(input, %{id: id, module: module}) do
     18     {input, errors} = Blueprint.prewalk(input, [], &handle_node/2)
     19 
     20     case errors do
     21       [] ->
     22         {:ok, input}
     23 
     24       found ->
     25         raise format_errors(found, id, module)
     26     end
     27   end
     28 
     29   # Collect the validation errors from nodes
     30   @spec handle_node(Blueprint.node_t(), [Phase.Error.t()]) ::
     31           {Blueprint.node_t(), [Phase.Error.t() | String.t()]}
     32   defp handle_node(%{errors: errs} = node, acc) do
     33     {node, acc ++ errs}
     34   end
     35 
     36   defp handle_node(node, acc) do
     37     {node, acc}
     38   end
     39 
     40   defp format_errors(errors, id, module) do
     41     Absinthe.Plug.DocumentProvider.Compiled.Writer.error_message(
     42       id,
     43       module,
     44       Enum.map(errors, &format_error/1)
     45     )
     46   end
     47 
     48   def format_error(%{locations: [%{line: line} | _], message: message, phase: phase}) do
     49     "On line #{line}: #{message} (#{phase})"
     50   end
     51 
     52   def format_error(error) do
     53     "#{inspect(error)}"
     54   end
     55 end