defmodule Absinthe.Federation.Schema.Phase.Validation.Util do
def parse_key_fields(nested_key) do
with {:ok, tokens} <- Absinthe.Lexer.tokenize("{ " <> nested_key <> " }"),
{:ok, parsed} <- :absinthe_parser.parse(tokens) do
access = [Access.key(:definitions), Access.at(0), Access.key(:selection_set), Access.key(:selections)]
{:ok, get_in(parsed, access)}
end
end
def is_nested?(key_fields) do
String.contains?(key_fields, "{") and String.contains?(key_fields, "}")
end
def syntax_error(key, object) do
%Absinthe.Phase.Error{
message: "The @key #{inspect(key)} has a syntax error.",
locations: [object.__reference__.location],
phase: __MODULE__,
extra: %{key: key}
}
end
def no_object_error(key, object, target_object) do
%Absinthe.Phase.Error{
message: "The object #{inspect(target_object)} of @key #{inspect(key)} does not exist.",
locations: [object.__reference__.location],
phase: __MODULE__,
extra: %{key: key}
}
end
end