Packages
absinthe
1.7.5
1.11.0
1.10.2
1.10.1
1.10.0
1.9.1
1.9.0
1.8.0
1.7.11
1.7.10
1.7.9
1.7.8
1.7.7
1.7.6
1.7.5
1.7.4
1.7.3
1.7.2
1.7.1
1.7.0
1.6.8
1.6.7
retired
1.6.6
1.6.5
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.6.0-rc.1
1.6.0-rc.0
1.5.5
1.5.4
1.5.3
1.5.2
1.5.1
1.5.0
1.5.0-rc.5
1.5.0-rc.4
1.5.0-rc.3
1.5.0-rc.2
1.5.0-rc.1
1.5.0-rc.0
1.5.0-beta.2
1.5.0-beta.1
1.5.0-beta.0
1.5.0-alpha.4
1.5.0-alpha.3
1.5.0-alpha.2
1.5.0-alpha.1
1.5.0-alpha.0
1.4.16
1.4.15
1.4.14
1.4.13
1.4.12
1.4.11
1.4.10
1.4.9
1.4.8
retired
1.4.7
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.4.0-rc.3
1.4.0-rc.2
1.4.0-rc.1
1.4.0-rc.0
1.4.0-beta.5
1.4.0-beta.4
1.4.0-beta.3
1.4.0-beta.2
1.4.0-beta.1
1.3.2
1.3.1
1.3.0
1.3.0-rc.0
1.3.0-beta.2
1.3.0-beta.1
1.3.0-beta.0
1.2.6
1.2.5
1.2.4
1.2.3
1.2.2
1.2.1
1.2.0
1.2.0-rc.0
1.2.0-beta.0
1.2.0-alpha0
1.2.0-alpha.2
1.2.0-alpha.1
1.1.11
1.1.10
1.1.9
1.1.8
1.1.7
1.1.6
1.1.5
1.1.4
1.1.3
1.1.2
1.1.1
1.1.0
1.0.0
0.5.2
0.5.1
0.5.0
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.2.3
0.2.2
0.2.1
0.1.0
GraphQL for Elixir
Security advisory:
This version has known vulnerabilities.
View advisories
Current section
Files
Jump to
Current section
Files
lib/absinthe/phase/schema/arguments/parse.ex
defmodule Absinthe.Phase.Schema.Arguments.Parse do
@moduledoc false
# Parses Leaf Node inputs
alias Absinthe.Blueprint.Input
alias Absinthe.{Blueprint, Type}
use Absinthe.Phase
def run(input, options \\ []) do
result = Blueprint.prewalk(input, &handle_node(&1, options[:context] || %{}))
{:ok, result}
end
# defp handle_node(%{schema_node: nil} = node, _context) do
# {:halt, node}
# end
defp handle_node(%{normalized: nil} = node, _context) do
node
end
defp handle_node(%Input.Value{normalized: normalized} = node, context) do
case build_value(normalized, node.schema_node, context) do
{:ok, value} ->
%{node | data: value}
:not_leaf_node ->
node
{:error, flag} ->
%{node | normalized: normalized |> flag_invalid(flag)}
end
end
defp handle_node(node, _context), do: node
defp build_value(%Input.Null{}, %Type.NonNull{}, _) do
{:error, :non_null}
end
defp build_value(normalized, %Type.Scalar{} = schema_node, context) do
case Type.Scalar.parse(schema_node, normalized, context) do
:error ->
{:error, :bad_parse}
{:ok, val} ->
{:ok, val}
end
end
defp build_value(%Input.Null{}, %Type.Enum{}, _) do
{:ok, nil}
end
defp build_value(normalized, %Type.Enum{} = schema_node, _) do
case Type.Enum.parse(schema_node, normalized) do
{:ok, %{value: value}} ->
{:ok, value}
:error ->
{:error, :bad_parse}
end
end
defp build_value(normalized, %Type.NonNull{of_type: inner_type}, context) do
build_value(normalized, inner_type, context)
end
defp build_value(_, _, _) do
:not_leaf_node
end
end