Packages
rust_graphql_parser
0.1.0
GraphQL parser implemented as a nif in Rust using Rustler. Converts GraphQL documents to an Absinthe.Language representation.
Current section
Files
Jump to
Current section
Files
lib/graphql_parser.ex
defmodule GraphQLParser do
@external_resource "./README.md"
@moduledoc """
#{File.read!(@external_resource) |> String.split("<!-- MDOC !-->", parts: 2) |> List.last()}
"""
@doc """
Parse a GraphQL query.
## Examples
{:ok, %Absinthe.Language.Document{}} = GraphQLParser.parse("{ id name }")
{:error, error} = GraphQLParser.parse("{ id name ")
"""
def parse_query(doc) do
case GraphQLParser.Native.parse_query(doc) do
{:ok, doc} -> {:ok, doc}
{:error, error} -> {:error, format_raw_parse_error(error)}
end
end
defp format_raw_parse_error("query parse error: Parse error at " <> message) do
[pos, message] = String.split(message, "\n", trim: true, parts: 2)
[line, column] = String.split(pos, ":", parts: 2) |> Enum.map(&String.to_integer/1)
%GraphQLParser.Error{
message: "Parse error\n" <> message,
locations: [%{line: line, column: column}]
}
end
defp format_raw_parse_error(error) do
%GraphQLParser.Error{
message: error,
locations: []
}
end
end