Module: GQLParser
- Defined in:
- ext/gql_parser.c
Defined Under Namespace
Classes: ParserError
Constant Summary collapse
- VERSION =
rb_str_new2("October 2021")
Class Method Summary collapse
-
.parse_execution(document) ⇒ Object
EXECUTION DOCUMENT [OPERATION*, FRAGMENT*].
Class Method Details
.parse_execution(document) ⇒ Object
EXECUTION DOCUMENT [OPERATION*, FRAGMENT*]
71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
# File 'ext/gql_parser.c', line 71
VALUE gql_parse_execution(VALUE self, VALUE document)
{
if (!RB_TYPE_P(document, T_STRING))
rb_raise(rb_eArgError, "%+" PRIsVALUE " is not a string", document);
// Initialize its pieces
VALUE pieces[] = {Qnil, Qnil};
struct gql_scanner scanner = gql_new_scanner(document);
gql_next_lexeme_no_comments(&scanner);
// Go over all the operations and fragments
while (scanner.lexeme != gql_i_eof)
{
// Try to upgrade if the token is a name
if (scanner.lexeme == gql_i_name)
scanner.lexeme = GQL_SAFE_NAME_TO_KEYWORD(&scanner, GQL_EXECUTION_KEYWORDS);
// It can contain either operations or fragments, anything else is unknown and an error
if (QGL_I_OPERATION(scanner.lexeme) || scanner.lexeme == gql_is_op_curly)
GQL_SAFE_PUSH(pieces[0], gql_parse_operation(&scanner));
else if (scanner.lexeme == gql_ie_fragment)
GQL_SAFE_PUSH(pieces[1], gql_parse_fragment(&scanner));
else if (scanner.lexeme != gql_i_comment)
scanner.lexeme = gql_i_unknown;
// If anything made the scanner fall into an unknown, throw an error
if (scanner.lexeme == gql_i_unknown)
gql_throw_parser_error(&scanner);
}
// Return the plain array, no need to turn into a token
return rb_ary_new4(2, pieces);
}
|