zf

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

coerce_lists.ex (953B)


      1 defmodule Absinthe.Phase.Document.Arguments.CoerceLists do
      2   @moduledoc false
      3 
      4   # Coerce non-list inputs to lists when appropriate.
      5   #
      6   # IE
      7   # ```
      8   # foo(ids: 1)
      9   # ```
     10   # becomes
     11   # ```
     12   # foo(ids: [1])
     13   # ```
     14   #
     15   # if `ids` is a list type.
     16 
     17   use Absinthe.Phase
     18   alias Absinthe.{Blueprint, Type}
     19   alias Absinthe.Blueprint.Input
     20 
     21   @spec run(Blueprint.t(), Keyword.t()) :: {:ok, Blueprint.t()}
     22   def run(input, _options \\ []) do
     23     node = Blueprint.prewalk(input, &coerce_node/1)
     24     {:ok, node}
     25   end
     26 
     27   defp coerce_node(%Input.Value{normalized: nil} = node), do: node
     28 
     29   defp coerce_node(%Input.Value{normalized: %Input.Null{}} = node) do
     30     node
     31   end
     32 
     33   defp coerce_node(%Input.Value{} = node) do
     34     case Type.unwrap_non_null(node.schema_node) do
     35       %Type.List{} ->
     36         %{node | normalized: Input.List.wrap(node.normalized, node.schema_node)}
     37 
     38       _ ->
     39         node
     40     end
     41   end
     42 
     43   defp coerce_node(node), do: node
     44 end