diff --git a/lib/graphql/parser.ex b/lib/graphql/parser.ex index efd0596..99fff68 100644 --- a/lib/graphql/parser.ex +++ b/lib/graphql/parser.ex @@ -1,10 +1,31 @@ defmodule GraphQL.Parser do + + def adapt_ast(map) when is_map(map) do + map + |> Enum.filter(fn {_,v} -> v != nil end) + |> Enum.reduce(%{}, fn({k, v}, acc) -> + if k in [:kind, :operation] do + if v == "ArrayValue" do + v = "ListValue" + end + Map.put(acc, k, String.to_atom(v)) + else + Map.put(acc, k, adapt_ast(v)) + end + end) + end + def adapt_ast(list) when is_list(list) do + Enum.map(list, &adapt_ast/1) + end + def adapt_ast(x), do: x + def parse(graphql) do result = GraphQL.Parser.Nif.parse(graphql) case result do {:ok, json} -> - {:ok, Poison.Parser.parse!(json, keys: :atoms)} + ast = Poison.Parser.parse!(json, keys: :atoms) + {:ok, adapt_ast(ast)} {:error, message} -> {:error, message} end